从IDE在终端中运行java程序时出现NoClassDefFoundError

时间:2014-02-09 04:38:16

标签: java command-line classpath

我无法运行在IntelliJ IDEA ide中正常工作的java程序。我运行相同的代码(删除包..)后得到的错误如下

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)

我在main方法中所做的就是创建一个主类的实例并调用几个方法。只有标题和主要方法的代码如下

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);
    }
 }

我在这里错过了什么吗?

编辑我使用以下命令编译并运行此程序

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

1 个答案:

答案 0 :(得分: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定义。