Ошибка: Произошла ошибка JNI, проверьте установку и повторите попытку — во время запуска программы Java из терминала Ubuntu.

Я пытаюсь запустить простую клиент-серверную программу, написанную на Java, через терминал Ubuntu. Я смог успешно скомпилировать код, к сожалению, я не могу запустить код.

Код класса сервера:

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();
                }
        }
}

Код класса клиента:

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();
                }
        }
}

Во время выполнения выполненного класса я получаю следующую ошибку:

mamun@mamun:~$ Ошибка теста java: Произошла ошибка JNI, проверьте установку и повторите попытку Исключение в потоке "main" java.lang.UnsupportedClassVersionError: Тест был скомпилирован более новой версией среды выполнения Java (класс версия файла 55.0), эта версия Java Runtime распознает только версии файлов классов до 52.0 в java.lang.ClassLoader.defineClass1(Native Method) в java.lang.ClassLoader.defineClass(ClassLoader.java:763) в java.security .SecureClassLoader.defineClass(SecureClassLoader.java:142) по адресу java.net.URLClassLoader.defineClass(URLClassLoader.java:467) по адресу java.net.URLClassLoader.access$100(URLClassLoader.java:73) по адресу java.net.URLClassLoader$1. run(URLClassLoader.java:368) в java.net.URLClassLoader$1.run(URLClassLoader.java:362) в java.security.AccessController.doPrivileged(собственный метод) в java.net.URLClassLoader.findClass(URLClassLoader.java:361 ) в java.lang.ClassLoader.loadClass(ClassLoade r.java:424) в sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) в java.lang.ClassLoader.loadClass(ClassLoader.java:357) в sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java :495)

Я пытался найти решение в stackoverflow и других форумах и блогах, я нашел несколько похожих вопросов, попробовал ответы на эти вопросы, но смог найти решение для своей проблемы. Вот почему я добавляю этот вопрос здесь.

Позже я попытался написать очень простую программу на Java, например, просто для печати приветствия, эта программа также может быть скомпилирована, но не будет работать с той же ошибкой. Я пробовал запускать программу из разных папок, кроме корневой. Но все усилия приводят к одному и тому же результату.

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

Я отлично могу работать в Eclipse, где у меня java версии 8, проблема возникает только при работе в терминале.

В моей версии Ubuntu jdk 11 (которая была автоматически обновлена ​​без моего ведома); Моя версия Ubuntu: 18.04.1 LTS


person Mamun    schedule 05.10.2018    source источник


Ответы (2)


Ошибка говорит обо всем:

Исключение в потоке "main" java.lang.UnsupportedClassVersionError: тест был скомпилирован более новой версией Java Runtime (версия файла класса 55.0)...

Вы скомпилировали для Java 11... но используете более старую JRE (Java 8).

ПРЕДЛОЖЕНИЯ:

  • перекомпилируйте с -source и -target для более ранней версии Java в вашем файле .class или

  • Обновите целевую JRE до Java 11

ПРИМЕР: javac -target 8 -source 8 MyClass.java

К вашему сведению, это версии Java в заголовке каждого файла класса Java:

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

  • Java SE 11 = 55 (0x37 шестнадцатеричный)
  • Java SE 10 = 54 (0x36 шестнадцатеричный)
  • Java SE 9 = 53 (0x35 шестнадцатеричный)
  • Java SE 8 = 52 (0x34 шестнадцатеричный)
  • Java SE 7 = 51 (0x33 шестнадцатеричный)
  • Java SE 6.0 = 50 (0x32 шестнадцатеричный)
  • Java SE 5.0 = 49 (0x31 шестнадцатеричный)
  • JDK 1.4 = 48 (0x30 шестнадцатеричный)
  • JDK 1.3 = 47 (0x2F шестнадцатеричный)
  • JDK 1.2 = 46 (0x2E шестнадцатеричный)
  • JDK 1.1 = 45 (0x2D шестнадцатеричный)

Также к вашему сведению, вот параметры командной строки для javac:

Java SE 11 > Инструменты > JavaC

PS:

У вас может быть установлено несколько независимых версий Java одновременно. Используйте команду альтернативы:

person paulsm4    schedule 05.10.2018
comment
При попытке перекомпилировать с помощью javac -target 8 -source 8 Test.java получаю следующее предупреждение warning: [options] bootstrap class path not set in conjunction with -source 8 *_Обратите внимание_я допустил ошибку в своем вопросе. Версия Java моей Ubuntu: 8 И версия javac: 11 - person Mamun; 06.10.2018
comment
Я пытаюсь установить путь Java в своей Ubuntu, используя следующий код: JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin export JAVA_HOME export JRE_HOME export PATH Я следую этому, [stackoverflow.com/questions/9612941/ в потоке Stackoverflow, чтобы установить путь Java. - person Mamun; 06.10.2018
comment
Я пробовал разные версии JDK с 8 по 11, установив его в пути. К сожалению, независимо от того, какую версию JDK я добавляю в путь, я всегда получаю javac версии 11, как показано ниже. javac --version javac 11 В чем причина такого исхода? - person Mamun; 06.10.2018
comment
Попробуйте использовать альтернативы утилита для настройки Java по умолчанию. - person paulsm4; 06.10.2018
comment
Прошу прощения за задержку комментария. У меня были срочные дела, из-за которых я вчера не мог сидеть за компьютером. Мне удалось решить проблему, но с другим подходом, хотя я не уверен, что она была полностью решена (потому что теперь у меня проблема, когда я собираюсь установить jdk 8 на свою машину). Проблема заключалась в том, что я d на моей машине была установлена ​​другая версия jdk, и путь был задан неправильно. Сегодня я удалил версию jdk 8 и добавил в путь jdk 11, и все работает нормально. Я успешно запустил серверное клиентское приложение через терминал, а также другие программы Java. - person Mamun; 07.10.2018
comment
Я думаю, что мне нужна четкая установка jdk на мою машину после удаления всех версий jdk. К сожалению, сейчас я не могу с этим справиться, поэтому сейчас мне нужно работать с jdk 11, а позже я сделаю чистую установку jdk. Я был бы очень признателен, если бы вы любезно предоставили мне некоторые рекомендации для четкой установки jdk на мою машину. - person Mamun; 07.10.2018

У меня также была эта проблема. Это мое решение. Было установлено 2 версии Java (java 8 и Java SE Development kit 13). Эта ошибка возникает из-за этой версии 2. Просто удалите старую версию, и все готово. (*Java компилирует файл .java с помощью комплекта разработки SE и пытается выполнить его, используя старую версию. Поэтому возникают совместимые ошибки.)

Затем проверьте версии Java в cmd, используя javac -version и java -version. После удаления оба кода версии должны быть одинаковыми.

person z1nc0r3    schedule 21.02.2021