错误:发生了JNI错误,请检查您的安装并重试 - 在从Ubuntu终端运行Java程序期间

时间:2022-05-13 17:33:40

I'm trying to run a simple client-server program written in Java through Ubuntu terminal. I could compile the code successfully unfortunately, I can't run the code.

我正在尝试通过Ubuntu终端运行一个用Java编写的简单客户端 - 服务器程序。不幸的是,我可以成功编译代码,我无法运行代码。

Server class code:

服务器类代码:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server 
{
        public static void main(String[] args)
        {
                try 
                {
                        //create server Socket with demo port
                        ServerSocket server = new ServerSocket(20);

                        //wait for server connection
                        Socket s = server.accept();

                        //upon establishing connection, print 
                       // successful message
                        System.out.println("connection eastablished");
                } 
                catch (IOException e) 
                {
                        e.printStackTrace();
                }
        }
}

Client class code:

客户端类代码:

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client 
{
        public static void main(String[] args)
        {
                try 
                {
                        //create client socket
                        Socket client = new Socket("127.0.0.1", 20);

                        //upon establishing connection, print                            
                        //successful message
                        System.out.println("connection eastablished");

                } 
                catch (UnknownHostException e) 
                {
                        e.printStackTrace();
                } 
                catch (IOException e) 
                {
                        e.printStackTrace();
                }
        }
}

During running the complied class, I'm getting the following error:

在运行编译的类期间,我收到以下错误:

mamun@mamun:~$ java Test Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.UnsupportedClassVersionError: Test has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:763) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) at java.net.URLClassLoader.access$100(URLClassLoader.java:73) at java.net.URLClassLoader$1.run(URLClassLoader.java:368) at java.net.URLClassLoader$1.run(URLClassLoader.java:362) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 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) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)

mamun @mamun:〜$ java测试错误:发生了JNI错误,请检查安装并再次尝试线程“main”中的异常java.lang.UnsupportedClassVersionError:测试已由更新版本的Java Runtime编译(类文件版本55.0),此版本的Java Runtime仅在java.security的java.lang.ClassLoader.defineClass(ClassLoader.java:763)的java.lang.ClassLoader.defineClass1(Native Method)中识别最高52.0的类文件版本.netureClassLoader.defineClass(SecureClassLoader.java:142)在java.net.URLClassLoader.defineClass(URLClassLoader.java:467)java.net.URLClassLoader.access $ 100(URLClassLoader.java:73)java.net.URLClassLoader $ 1。运行(URLClassLoader.java:368)java.net.URLClassLoader $ 1.run(URLClassLoader.java:362)java.security.AccessController.doPrivileged(Native Method)java.net.URLClassLoader.findClass(URLClassLoader.java:361) )在sun.misc.Launcher的$ java.lang.ClassLoader.loadClass(ClassLoader.java:424)$ AppClassLoader.loadClass (Launcher.java:349)位于sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)的java.lang.ClassLoader.loadClass(ClassLoader.java:357)

I've tried to search * and other forum and blogs to find a solution, I've find some similar questions, tried the answers provided to those question but could find a solution for my problem. That's why I'm adding this question here.

我试图搜索*和其他论坛和博客来找到解决方案,我发现了一些类似的问题,尝试了提供给这些问题的答案,但可以找到解决我的问题的方法。这就是我在这里添加这个问题的原因。

Later, I've try to write a very simple Java program, like just to print a greeting, this program also could be compiled but would not run producing the same error. I've tried to execute the program from different folders except from the root folder. But all efforts produce the same result.

后来,我尝试编写一个非常简单的Java程序,就像打印一个问候语一样,这个程序也可以编译但不会运行产生相同的错误。我试过从根文件夹以外的不同文件夹执行程序。但所有努力都会产生相同的结果。

public class Test
{
        public static void main(String[] args)
                {
                        System.out.println("Hello...");
                }
}

I can perfectly work in Eclipse where my java version 8, problem occurs only when working in terminal.

我可以在Eclipse中完美地工作,我的java版本8,仅在终端工作时才会出现问题。

In my Ubuntu jdk version is 11 (which has been automatically been updated without my knowledge); My Ubuntu version:18.04.1 LTS

在我的Ubuntu中,jdk版本是11(在我不知情的情况下已经自动更新);我的Ubuntu版本:18.04.1 LTS

1 个解决方案

#1


2  

The error says it all:

错误说明了一切:

Exception in thread "main" java.lang.UnsupportedClassVersionError: Test has been compiled by a more recent version of the Java Runtime (class file version 55.0)...

线程“main”中的异常java.lang.UnsupportedClassVersionError:Test已由更新版本的Java Runtime(类文件版本55.0)编译...

You've compiled for Java 11 ... but you're running an older JRE (Java 8).

您已经为Java 11编译了......但是您正在运行较旧的JRE(Java 8)。

SUGGESTIONS:

  • recompile with -source and -target to target an earlier version of Java in your .class file, or

    使用-source和-target重新编译以在.class文件中定位早期版本的Java,或者

  • Upgrade your target JRE to Java 11

    将目标JRE升级到Java 11

EXAMPLE: javac -target 8 -source 8 MyClass.java

示例:javac -target 8 -source 8 MyClass.java

FYI, these are the Java versions in each Java class file's header:

仅供参考,这些是每个Java类文件头文件中的Java版本:

https://en.wikipedia.org/wiki/Java_class_file

  • Java SE 11 = 55 (0x37 hex)
  • Java SE 11 = 55(0x37十六进制)

  • Java SE 10 = 54 (0x36 hex)
  • Java SE 10 = 54(0x36十六进制)

  • Java SE 9 = 53 (0x35 hex)
  • Java SE 9 = 53(0x35十六进制)

  • Java SE 8 = 52 (0x34 hex)
  • Java SE 8 = 52(0x34十六进制)

  • Java SE 7 = 51 (0x33 hex)
  • Java SE 7 = 51(0x33十六进制)

  • Java SE 6.0 = 50 (0x32 hex)
  • Java SE 6.0 = 50(0x32十六进制)

  • Java SE 5.0 = 49 (0x31 hex)
  • Java SE 5.0 = 49(0x31 hex)

  • JDK 1.4 = 48 (0x30 hex)
  • JDK 1.4 = 48(0x30十六进制)

  • JDK 1.3 = 47 (0x2F hex)
  • JDK 1.3 = 47(0x2F十六进制)

  • JDK 1.2 = 46 (0x2E hex)
  • JDK 1.2 = 46(0x2E hex)

  • JDK 1.1 = 45 (0x2D hex)
  • JDK 1.1 = 45(0x2D十六进制)

Also FYI, here are the command line options for javac:

另外,仅供参考,以下是javac的命令行选项:

Java SE 11 > Tools > javac

Java SE 11>工具> javac

PS:

You may have multiple independent versions of Java installed at the same time. Use the alternatives command:

您可能同时安装了多个独立版本的Java。使用alternatives命令:

#1


2  

The error says it all:

错误说明了一切:

Exception in thread "main" java.lang.UnsupportedClassVersionError: Test has been compiled by a more recent version of the Java Runtime (class file version 55.0)...

线程“main”中的异常java.lang.UnsupportedClassVersionError:Test已由更新版本的Java Runtime(类文件版本55.0)编译...

You've compiled for Java 11 ... but you're running an older JRE (Java 8).

您已经为Java 11编译了......但是您正在运行较旧的JRE(Java 8)。

SUGGESTIONS:

  • recompile with -source and -target to target an earlier version of Java in your .class file, or

    使用-source和-target重新编译以在.class文件中定位早期版本的Java,或者

  • Upgrade your target JRE to Java 11

    将目标JRE升级到Java 11

EXAMPLE: javac -target 8 -source 8 MyClass.java

示例:javac -target 8 -source 8 MyClass.java

FYI, these are the Java versions in each Java class file's header:

仅供参考,这些是每个Java类文件头文件中的Java版本:

https://en.wikipedia.org/wiki/Java_class_file

  • Java SE 11 = 55 (0x37 hex)
  • Java SE 11 = 55(0x37十六进制)

  • Java SE 10 = 54 (0x36 hex)
  • Java SE 10 = 54(0x36十六进制)

  • Java SE 9 = 53 (0x35 hex)
  • Java SE 9 = 53(0x35十六进制)

  • Java SE 8 = 52 (0x34 hex)
  • Java SE 8 = 52(0x34十六进制)

  • Java SE 7 = 51 (0x33 hex)
  • Java SE 7 = 51(0x33十六进制)

  • Java SE 6.0 = 50 (0x32 hex)
  • Java SE 6.0 = 50(0x32十六进制)

  • Java SE 5.0 = 49 (0x31 hex)
  • Java SE 5.0 = 49(0x31 hex)

  • JDK 1.4 = 48 (0x30 hex)
  • JDK 1.4 = 48(0x30十六进制)

  • JDK 1.3 = 47 (0x2F hex)
  • JDK 1.3 = 47(0x2F十六进制)

  • JDK 1.2 = 46 (0x2E hex)
  • JDK 1.2 = 46(0x2E hex)

  • JDK 1.1 = 45 (0x2D hex)
  • JDK 1.1 = 45(0x2D十六进制)

Also FYI, here are the command line options for javac:

另外,仅供参考,以下是javac的命令行选项:

Java SE 11 > Tools > javac

Java SE 11>工具> javac

PS:

You may have multiple independent versions of Java installed at the same time. Use the alternatives command:

您可能同时安装了多个独立版本的Java。使用alternatives命令: