简体   繁体   English

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

[英]NoClassDefFoundError while running a java program in terminal from IDE

I am having trouble running a java program that works fine in the IntelliJ IDEA ide. 我在运行在IntelliJ IDEA ide中运行良好的Java程序时遇到问题。 The error I get when I run the same code (after removing the package ..) as follows 当我运行相同的代码(在删除软件包后..)时遇到的错误如下

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)

All I'm doing in the main method is creating an instance of the main class and calling the several methods. 我在main方法中所做的只是创建主类的实例并调用几种方法。 The code with just the headers and the main method as below 仅包含标题和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);
    }
 }

Am I missing something here? 我在这里想念什么吗?

EDIT I compile and run this program with the following commands 编辑我使用以下命令编译并运行该程序

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

You have to add working directory denoted as . 您必须添加表示为的工作目录. to the class path as fcrypt.class is located there. 到类路径,因为fcrypt.class位于此处。

Syntax for Unix: Unix的语法:

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

note elements are separated with : . 注意元素用:分隔。

Syntax for Windows: Windows语法:

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

note elements are separated with ; 注意元素用分隔; .

Java code style suggests class names to start with a capital letter. Java代码样式建议类名以大写字母开头。 So it should be class FCrypt defined in FCrypt.java . 因此它应该是class FCrypt定义的FCrypt.java class FCrypt

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM