我在 Java 方面相对缺乏经验,因此希望我能够在这里提供足够的信息,使其对其他人有意义且有用。
我正在尝试运行别人的代码库,该代码库需要两个输入文件,在通过它们运行代码时将一些信息打印到 STDOUT,然后退出。
我使用如下命令编译了代码:
java -g -cp .:../../deps/dep1.jar:../../deps/dep2.jar:../../deps/dep3.jar nameofclass/Nameofclass.java nameofclass/File1.java nameofclass/File2.java nameofclass/File3.java
然后我可以使用 jdb
执行,如下所示:
jdb -classpath ".:../../deps/dep1.jar:../../deps/dep2.jar:../../deps/dep3.jar:" nameofclass.Nameofclass file1.ext file2.ext
然后在jdb中:
run nameofclass.Nameofclass file1.ext file2.ext
当我这样做时,在 jdb 中,我会打印出正确运行代码的进程,并以 The application exited
:
Set uncaught java.langh.Throwable
Set deferred uncaught java.langh.Throwable
>
VM Started: /path/to/src
<print out of the code running correctly>
The application exited
到目前为止,一切都很好。当我尝试使用 java
而不是 jdb
运行相同的代码时,我得到:
java -cp ".:../../deps/dep1.jar:../../deps/dep2.jar:../../deps/dep3.jar:" nameofclass.Nameofclass file1.ext file2.ext
Exception in thread "main" java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: java/lang/invoke/StringConcatFactory
跟踪指向主函数最开始处的一行代码,这似乎在 jdb
上运行没有任何问题。
有什么想法如何运行我可以使用 jdb
成功运行但只需在命令行上使用 java
运行的代码吗?
最佳答案
事实证明,StringFactory 错误表明我的 Java 安装在 Ubuntu 16.04 中失败了,jdb
运行 Java 9,但 java
指向 /usr/bin/java
版本比那个旧得多。我纠正了这个问题:
https://askubuntu.com/questions/176121/dpkg-error-trying-to-overwrite-file-which-is-also-in
最后运行:
sudo update-alternatives --config java
完成此操作后,运行与 jdb
类似的 java
即可工作。
关于java - 通过命令行jdb运行java程序执行正确,但作为java命令行执行时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57554875/