【问题标题】:Code running in Netbeans but not in command line在 Netbeans 中运行但不在命令行中运行的代码
【发布时间】:2018-01-11 10:06:51
【问题描述】:

我下载了可用的时间序列分类工具箱here,我使用该命令成功地在Netbeans(由于兼容性问题而不是Eclipse)上运行

netbeans --jdkhome /usr/lib/jvm/java-1.8.0-openjdk-amd64/

我希望能够在服务器上运行它,因此我需要能够使用命令行运行它。 然而我没有成功。我的猜测是 jdk 有问题(我不习惯 Java,所以可能是别的问题),因为当我运行时

sudo update-alternatives --config java

我明白了

There are 5 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-9-openjdk-amd64/bin/java       1091      auto mode
  1            /usr/bin/gij-4.8                                 1048      manual mode
  2            /usr/bin/gij-4.9                                 1049      manual mode
  3            /usr/bin/gij-5                                   1050      manual mode
* 4            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode
  5            /usr/lib/jvm/java-9-openjdk-amd64/bin/java       1091      manual mode

其中不包含我在 Netbeans 中使用的 jdk 的路径。 我没有找到方法告诉 Java 我想使用另一个 jdk,所以我尝试不使用:


运行特定主文件的示例

来自TimeSeriesClassification/src

javac timeseriesweka/classifiers/LearnShapelets.java 
java -cp ../bin:. timeseriesweka.classifiers.LearnShapelets

错误:发生 JNI 错误,请检查您的安装并重试

线程“main”中的异常 java.lang.NoClassDefFoundError: TechnicalInformation

在 java.lang.Class.getDeclaredMethods0(Native Method)

在 java.lang.Class.privateGetDeclaredMethods(Class.java:2701)

在 java.lang.Class.privateGetMethodRecursive(Class.java:3048)

在 java.lang.Class.getMethod0(Class.java:3018)

在 java.lang.Class.getMethod(Class.java:1784)

在 sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)

在 sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)

原因:java.lang.ClassNotFoundException: TechnicalInformation

在 java.net.URLClassLoader.findClass(URLClassLoader.java:381)

在 java.lang.ClassLoader.loadClass(ClassLoader.java:424)

在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)

在 java.lang.ClassLoader.loadClass(ClassLoader.java:357)

...还有 7 个

任何有关如何正确设置 Java 的帮助将不胜感激


With(按照 ACV 的答案)

java -cp ../bin/Test.jar:lib/*:. timeseriesweka.classifiers.LearnShapelets

Exception in thread "main" java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: java/lang/invoke/StringConcatFactory
    at timeseriesweka.classifiers.LearnShapelets.main(LearnShapelets.java:746)
Caused by: java.lang.NoClassDefFoundError: java/lang/invoke/StringConcatFactory
    ... 1 more
Caused by: java.lang.ClassNotFoundException: java.lang.invoke.StringConcatFactory
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

【问题讨论】:

    标签: java netbeans


    【解决方案1】:

    试试这个:

    -cp "../bin/Test.jar:lib/*:." 而不是你的:

    -cp ../bin:.

    【讨论】:

    • 得到一个不同的错误:线程“main”中的异常 java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: java/lang/invoke/StringConcatFactory at timeseriesweka.classifiers.LearnShapelets.main(LearnShapelets.java :746) 引起:java.lang.NoClassDefFoundError: java/lang/invoke/StringConcatFactory / 引起:java.lang.ClassNotFoundException: java.lang.invoke.StringConcatFactory (我将在问题中有完整的错误)跨度>
    • 这是一个 Java 9 类。所以你需要 java 9 来运行它:docs.oracle.com/javase/9/docs/api/java/lang/invoke/…
    • javac -version 返回:javac 9-internaljava -version 返回openjdk version "1.8.0_151" 所以如果我理解得很好,我只需要更新我的 JDK 版本?
    • 你需要两者都是相同的 java 9
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多