文件可以编译,但不会运行

File can be compiled, but won't run

我可以通过使用命令 javac -cp "path\to\lib\file.jar" FileName.java 将文件指向它使用的库文件夹来编译文件,但是当我尝试使用 java FileName 运行 它时,我收到以下堆栈跟踪:

java SecureFileSample
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: com/voltage/securedata/enterprise/VeException
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
        at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
        at java.lang.Class.getMethod0(Class.java:3018)
        at java.lang.Class.getMethod(Class.java:1784)
        at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: com.voltage.securedata.enterprise.VeException
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 7 more

这意味着在我解决这个问题之前,该软件无法使用或与其他软件集成(在此处添加它是因为 Stack Overflow 以某种方式认为“可以编译但不会 运行 不清楚足够”作为描述)。预期的行为是 class 到 运行 (执行它给出的指令)但是常规命令,比如 java FileName 将不起作用。

我用谷歌搜索了一下,我找到的唯一答案(与主 class 中的构建器相关)与我的构建器的情况完全匹配。

此文件中没有包声明。

您可以使用 java 命令提供相同的 class 路径(大概包含 VeException class)。另外(为了从评论中捕捉讨论)不要忘记添加包含已编译的目录 class:

java -cp "path\to\lib\file.jar;path\to\lib\" SecureFileSample