2014-02-09 3 views
1

У меня возникла проблема с запуском java-программы, которая отлично работает в идее IntelliJ IDEA. Я получаю ошибку, когда я запускаю тот же код (после удаления пакета ..) следующим образомNoClassDefFoundError при запуске java-программы в терминале из IDE

Exception in thread "main" java.lang.NoClassDefFoundError: fcrypt 
Caused by: java.lang.ClassNotFoundException: fcrypt 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 

Все, что я делаю в основном метод создает экземпляр основного класса и вызова нескольких методов. Код с только заголовками и основным методом, указанным ниже

import org.bouncycastle.jce.provider.BouncyCastleProvider; 
import org.bouncycastle.util.encoders.Base64; 

import javax.crypto.Cipher; 
import javax.crypto.KeyGenerator; 
import javax.crypto.SecretKey; 
import javax.crypto.spec.SecretKeySpec; 
import java.io.*; 
import java.security.*; 
import java.security.spec.PKCS8EncodedKeySpec; 
import java.security.spec.X509EncodedKeySpec; 
import java.util.Arrays; 

/** 
* Created by Aditya Rao on 05/02/14. 
*/ 
public class fcrypt { 
    private static final String RSA_NONE_PKCS1PADDING = "RSA/None/PKCS1Padding"; 

    static { 
     Security.addProvider(new BouncyCastleProvider()); 
    } 

    .... 

    public static void main (String[] args) throws Exception { 
     if (args.length != 5) { 
      System.out.print("Invalid parameters. "); 
      printUsage(); 
      System.exit(1); 
     } 

     if (!(args[0].equals("-e") | args[0].equals("-d"))) { 
      System.out.print("Please specify usage. "); 
      printUsage(); 
      System.exit(1); 
     } 

     fcrypt f = new fcrypt(); 

     String[] inputs = Arrays.copyOfRange(args, 1, args.length); 
     if (args[0].equals("-e")) 
      f.encryptAndSign(inputs); 
     else 
      f.verifyAndDecrypt(inputs); 
    } 
} 

Я что-то пропустил?

EDIT я скомпилировать и запустить эту программу с помощью следующих команд

javac -cp libs/bcprov-jdk15on-150.jar fcrypt.java 
java -cp libs/bcprov-jdk15on-150.jar fcrypt <args> 
+0

Звучит как проблема http://en.wikipedia.org/wiki/Classpath_(Java). Убедитесь, что вы передали путь к классу, когда выполняете свою банку. IntelliJ, вероятно, добавляет это автоматически. Какова точная командная строка, выполняемая intellij? Он должен сказать в маленькой подсказке терминала, когда вы запускаете приложение – devshorts

+0

У меня есть банда bouncycastle, но я добавил соответствующие классы классов для компиляции и запуска программы. Я редактировал вопрос с помощью команд. – adifire

+1

Имеет ли fcrypt конструктор? Что произойдет, если вы удалите fcrypt f = new fcrypt(); изнутри основной? Изменилась ли ошибка? –

ответ

2

Вы должны добавить рабочий каталог обозначаемая . на пути к классу, как fcrypt.class находится там.

Синтаксис для Unix:

java -cp ".:libs/bcprov-jdk15on-150.jar" fcrypt 

примечаниями разделены :.

Синтаксис для Windows:

java -cp ".;libs/bcprov-jdk15on-150.jar" fcrypt 

элементы записные разделены ;.

Стиль Java-кода предлагает имена классов, начинающиеся с заглавной буквы. Таким образом, это должно быть class FCrypt, определенное в FCrypt.java.

Смежные вопросы