有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

noclassdeffounderror(java字符串连接)为什么会出现这种异常?

这是我的简单代码

class atmPin{
    public static void main(String[] args) {
        int x = 0;
        System.out.println("hi there"+x);
    }
}

当我运行它时,我得到了这个异常错误

 java atmPin 
    Exception in thread "main" java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: java/lang/invoke/StringConcatFactory
        at atmPin.main(atmPin.java:6)
    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:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 1 more

这与java版本有关吗?我不知道为什么会这样。这是一件很简单的事情( 即使使用字符串也会得到相同类型的异常。 例如

 String x = "";
     x += "a";

共 (1) 个答案

  1. # 1 楼答案

    java.lang.invoke.StringConcatFactory是出现在Java 9中的一个类,用于实现JEP 280 (Indify String Concatenation),该类更改javac编译器的行为,以便它将invokedynamic指令与给定类一起用于字符串关联。因此,这个错误的原因很可能是使用JDK9或更高版本的javac进行编译,同时在Java8或更低版本(或者使用自定义Java运行时)下运行此代码

    为了解决这个问题,可以使用另一个版本的编译器,或者为编译器指定另一个版本,或者应该使用另一个JRE来运行编译后的类