【问题标题】:Running java program using packages in multiple folders使用多个文件夹中的包运行 java 程序
【发布时间】:2018-03-12 06:30:00
【问题描述】:

我正在尝试运行具有以下结构的程序:

+src
    +gui
        -XL.java
        -moreFiles.java
        +menu
            -guiFiles.java
    +util
        -utilFiles.java
    +extra
         -extraFiles.java

我正在尝试通过调用来编译代码

javac gui/XL.java

成功了。 当我尝试使用

运行代码时
java gui.XL

我收到以下错误消息:

Exception in thread "main" java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: java/lang/invoke/StringConcatFactory
    at gui.XL.<init>(XL.java:25)
    at gui.XL.main(XL.java:58)
Caused by: java.lang.NoClassDefFoundError: java/lang/invoke/StringConcatFactory
    ... 2 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)
    ... 2 more

我想我的类路径有一些问题,但我不知道如何修复它。有人有什么建议吗?

【问题讨论】:

  • 你必须将所有的.java源文件编译成.class文件,而不是一个。
  • 那是Java 9的类你安装java 9了吗?
  • @duffymo:当我首先编译所有 .java 文件时,我得到了同样的错误。
  • @Oleg:当我检查我的 java 版本(使用 sudo update-alternatives --config java)时,我知道我的计算机上有 java-8-openJDK 和 java-9-openJDK,我有都试过了。它们都不起作用。但它说我的java版本是“9 internal”(不管是什么意思)。当我使用“9-internal”版本时,我得到一个 java 运行时环境 crashdump,而不是上面发布的 java-8-openjdk 错误。

标签: java classpath


【解决方案1】:

我的问题与类路径或我没有使用 IDE 无关。我的问题来自这样一个事实,即我正在更改“java”命令来运行我的 java-openjdk-8,但我的编译器仍然使用 java-openjdk-9 运行。因此解决方案是

sudo update-alternatives --config javac #Change to java 8
sudo update-alternatives --config java #Change to java 8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    相关资源
    最近更新 更多