При запуске какого-либо кода, написанного на Java, программист может получить сообщение об ошибке с текстом «A JNI error has occurred, please check your installation and try again». Обычно причиной ошибки выступает разница в версии компилятора и среды выполнения, из-за чего происходит некорректная интерпретация и выполнение имеющегося кода. Ниже разберём, в чём суть данной ошибки, как её исправить, а также отдельно укажем, как решить данную ошибку при запуске игры Minecraft.
- Что такое JVM, JNI и JRE?
- Причина проблемы A JNI error has occurred, please check your installation and try again
- Установите одинаковую версию JRE и JDK
- Правильно настройте переменные среды для Java
- Ошибка JNI error has occurred при запуске Майнкрафт
- Заключение
Что такое JVM, JNI и JRE?
Как известно, программы, написанные на «Java», компилируются в байтовый код, который распознаётся виртуальной машиной Ява, называемой «JVM» (Java Virtual Machine). JVM по своей сути является компьютерным симулятором, и при запуске программы написанной на Java, распознаёт инструкции байтового кода, и переводит их в машинные инструкции собственной системы.
JVM должна обеспечивать удобный способ доступа к ресурсам системы – файлам, сетевым соединениям, видеокарте и другим компонентам. Механизмы доступа к этим ресурсам напрямую зависят от системы, в которой работает JVM. Для обеспечения своей работы виртуальная машина использует собственный интерфейс Java, называемый «JNI» (Java Native Interface).
Методы Java, использующие JNI для доступа к службам, квалифицируются термином «native». Квалификатор «native» сообщает виртуальной машине, что код для выполнения при вызове данного метода присутствует во внешней библиотеке. JVM ищет конкретный вызов библиотеки, который необходимо выполнить, на основе полного имени пути к методу и его аргументам. Существует специальное соглашение об именах, позволяющее сопоставить метод с конкретной ссылкой на внешнюю библиотеку.
Данный механизм JNI позволяет программам на Java кодировать имя переносимого метода. И скомпилированный в Виндовс код Java будет отлично запускаться на компьютерах под управлением Линукс или Мак.
Как мы уже писали выше, Java имеет собственные библиотеки для обеспечения базового взаимодействия с системой на уровне чтения-записи файлов, создания сетевых подключений и вывода изображения на экран. Они распространяются с JVM как часть среды выполнения Ява, известные как «JRE» (Java Runtime Environment), независимо от того, является ли она автономной JRE или включена в Java Development Kit (JDK).
Причина проблемы A JNI error has occurred, please check your installation and try again
Текст данной ошибки переводится как «Произошла ошибки INI, пожалуйста, проверьте вашу инсталляцию и попробуйте вновь». Данная ошибка, получаемая при запуске программы на JVM, указывает на проблему с запуском кода, связанного с собственным методом.
Причины проблемы могут быть следующими:
- Повреждена библиотека JDK / JRE, вследствие чего она не может быть загружена, и JVM не сможет выполнить код;
- Повреждён функционал операционной системы, вследствие чего последняя не в состоянии удовлетворить системный вызов, созданный нативным кодом;
- Имеются различия в номерах версий JRE (среда выполнения Java) и JDK (Java Development Kit), что также может вызывать ошибку JNI. Различия в номерах версий приведут к тому, что JVM откажется запускать код, потому что он был скомпилирован для совместимости с версией Java, превышающей максимальную версию, поддерживаемую JVM. Проще говоря, код может быть скомпилирован на одной версии Ява (например, 10), а пытается запускаться с помощью версии Ява 9;
- Также проблема может быть вызвана при попытке запустить файл.jar через командную строку, например с помощью команды java -jar File.jar.
Давайте разберём способы, позволяющие устранить ошибку JNI на вашем ПК.
Это может помочь: ошибка Out of memory – как устранить.
Установите одинаковую версию JRE и JDK
Исправить ошибку «A JNI error has occurred» поможет обновление JRE и JDK до актуальных синхронных версий. Необходимо убедится в их одинаковой версии, для чего вызовите системную строку (нажмите Win+R, введите там cmd и нажмите ввод), и наберите там:
java -version
и нажмите ввод.
Затем наберите: javac –version
Полученные результаты должны совпадать. Если они они не совпадают, то это сигнализирует о несоответствии версии компилятора и среды выполнения Java. Для решения проблемы рекомендуем установить однотипные и актуальные версии компилятора и среды выполнения, после чего вновь используйте команды «java -version» и «javac -version» для проверки, возвращают ли данные команды один и тот же номер версии.
Если версии синхронны, тогда ваш код Java необходимо будет скомпилировать с помощью компилятора новой версии. После этого ошибка «A JNI error has occurred, please check your installation» может быть устранена.
Правильно настройте переменные среды для Java
Для исправления ошибки «A JNI error has occurred» может понадобится настроить переменные среды для Java. Выполните следующее:
- Нажмите на Win+R;
- В открывшемся окошке введите sysdm.cpl и нажмите на ввод;
- Откроется окно свойств системы. Выберите вкладку «Дополнительно»;
- Далее внизу кликните на кнопку «Переменные среды»;
- В нижнем окне выберите переменную «Path», после чего нажмите чуть ниже на кнопку «Изменить»;
Выберите “Path”, и нажмите на “Изменить” - Здесь вы ищите строку, в которой прописан путь установки вашего JDK. Например, он может хранится по пути C:ProgramFilesJavajdk-13.0.1bin;
- Если этой записи в перечне ваших переменных нет, вы можете добавить её, нажав на «Создать» справа. Если же вы еще не установили JDK, вы можете скачать её с https://www.oracle.com/java/technologies/downloads/;
- Когда вы найдёте данную строку, используйте кнопку «Вверх» пока запись не окажется в самой верхней части;
- Нажмите внизу на «Ок» для сохранения результата, и перезагрузите ваш ПК. Ошибка «JNI error has occurred» будет исправлена.
Смотрите на данном англоязычном виде способ решения возникшей проблемы:
Ошибка JNI error has occurred при запуске Майнкрафт
Некоторые пользователи, установившие обновление Minecraft 1.17 («Caves and Cliffs: Part 1»), сообщают, что получают сообщение об ошибке «A JNI error has occurred, please check your installation and try again» или «Java exception».
Если вы один из таких пользователей, тогда вам нет повода для беспокойства. «Ошибка JNI», которая начала появляться с последним обновлением Minecraft 1.17, может быть исправлена путем установки Java 16 или более поздних версий для своей работы. Это подтверждается многими сообщениями от игроков, у которых возникла рассматриваемая в статье проблема.
Читайте также: GLFW error 65542: WGL the driver does not appear to support OpenGL – как решить?
Заключение
В нашем материале была рассмотрена суть ошибки «A JNI error has occurred, please check your installation and try again», и перечислены способы для её решения. Обычно причиной ошибки является несоответствие версии JRE и JDK, которые приводят к появлению рассматриваемой ошибки. Рекомендуем обновить версию данных инструментов до самой синхронной и актуальной, после чего декомпилировать ваш код. Обычно после этого ошибка будет устранена, и вы сможете использовать рабочую версию вашего кода для необходимых вам задач.
Consider:
public class LoginCumReg implements ActionListener, KeyListener {
private JFrame form;
private JTextField txtunm;
private JTextField txtnm;
private JTextField txteml;
private JButton cmdcreate;
private JPasswordField txtpass;
private JPasswordField txtpassreg;
private JButton cmdok;
private JLabel lblunm;
private JLabel lblpass;
private JLabel lbleml;
private JLabel lblpassreg;
private JLabel lblnm;
private JPanel panel_1;
public LoginCumReg() {
// Construct components
form = new JFrame("Sign Up");
form.getContentPane().setFont(
new Font("Plantagenet Cherokee", Font.BOLD, 18));
txtunm = new JTextField(5);
txtunm.addKeyListener(this);
txtunm.setBounds(637, 55, 100, 25);
txtnm = new JTextField(5);
txtnm.setBounds(637, 228, 100, 25);
txteml = new JTextField(5);
txteml.setBounds(637, 264, 100, 25);
cmdcreate = new JButton("Create Account");
cmdcreate.setBounds(527, 350, 188, 25);
txtpass = new JPasswordField(5);
txtpass.setBounds(637, 91, 100, 25);
txtpassreg = new JPasswordField(5);
txtpassreg.setBounds(637, 300, 100, 25);
cmdok = new JButton("OK");
cmdok.setBounds(527, 139, 100, 25);
lblunm = new JLabel("UserName");
lblunm.setBounds(527, 55, 73, 25);
lblpass = new JLabel("Password");
lblpass.setBounds(527, 91, 100, 25);
lbleml = new JLabel("Email ID");
lbleml.setBounds(527, 264, 100, 25);
lblpassreg = new JLabel("Password");
lblpassreg.setBounds(527, 300, 100, 25);
lblnm = new JLabel("Full Name");
lblnm.setBounds(527, 228, 100, 25);
// form.setResizable(false);
// Adjust size and set layout
form.setPreferredSize(new Dimension(800, 450));
form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
form.getContentPane().setLayout(null);
// Add components
form.getContentPane().add(txtunm);
form.getContentPane().add(txtnm);
form.getContentPane().add(txteml);
form.getContentPane().add(cmdcreate);
form.getContentPane().add(txtpass);
form.getContentPane().add(txtpassreg);
form.getContentPane().add(cmdok);
form.getContentPane().add(lblunm);
form.getContentPane().add(lblpass);
form.getContentPane().add(lbleml);
form.getContentPane().add(lblpassreg);
form.getContentPane().add(lblnm);
cmdcreate.setActionCommand("Create Account");
cmdcreate.addActionListener(this);
cmdok.setActionCommand("Login");
JPanel panel = new JPanel();
panel.setBounds(502, 29, 254, 154);
panel.setFont(new Font("Palatino Linotype", Font.PLAIN, 14));
panel.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.RAISED,
null, null), "LOGIN", TitledBorder.LEADING, TitledBorder.TOP,
null, null));
panel.setBackground(SystemColor.controlHighlight);
form.getContentPane().add(panel);
panel_1 = new JPanel();
panel_1.setBounds(500, 204, 254, 186);
panel_1.setFont(new Font("Palatino Linotype", Font.PLAIN, 14));
panel_1.setBorder(new TitledBorder(new EtchedBorder(
EtchedBorder.RAISED, null, null), "SIGN UP",
TitledBorder.LEADING, TitledBorder.TOP, null, null));
panel_1.setBackground(SystemColor.controlHighlight);
form.getContentPane().add(panel_1);
JLabel lblNewLabel = new JLabel("New label");
lblNewLabel.setBounds(91, 139, 286, 101);
lblNewLabel.setIcon(new ImageIcon(
"C:\Users\JAsh\Desktop\Projects\JAsh.png"));
form.getContentPane().add(lblNewLabel);
JPanel panel_2 = new JPanel();
panel_2.setBounds(77, 118, 315, 145);
panel_2.setBorder(new EtchedBorder(EtchedBorder.RAISED,
SystemColor.activeCaptionBorder, SystemColor.menu));
panel_2.setBackground(SystemColor.controlHighlight);
form.getContentPane().add(panel_2);
cmdok.addActionListener(this);
form.setResizable(false);
form.pack();
form.setVisible(true);
System.out.println("const..");
}
public static void main(String[] args) {
new LoginCumReg();
}
@Override
public void actionPerformed(ActionEvent ae) {
// TODO Auto-generated method stub
if (ae.getActionCommand().equals("Create Account")) {
new Registration(txtnm.getText(), txteml.getText(), new String(
txtpassreg.getPassword()));
form.setVisible(false);
}
if (ae.getActionCommand().equals("Login")) {
try {
if (txtunm.getText().equalsIgnoreCase("admin")
&& new String(txtpass.getPassword()).equals("admin")) {
form.setVisible(false);
new Admin();
} else {
DataBase db = new DataBase();
db.connect();
String sql = "SELECT * FROM LOGIN WHERE USERNAME='"
+ txtunm.getText() + "'";
ResultSet rs = db.getDDL(sql);
boolean found = false;
while (rs.next()) {
if (rs.getString("Password").equals(
new String(txtpass.getPassword()))) {
found = true;
form.setVisible(false);
String name = rs.getString("FullName");
Session.startSession(txtunm.getText(), name);
new FacultyWelcome();
}
}
if (!found)
JOptionPane.showMessageDialog(new JFrame(),
"Invalid Credentials");
db.close();
}
}
catch (Exception e) {
}
}
}
@Override
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
// JOptionPane.showMessageDialog(new JFrame(), arg0.getKeyChar() + "-" + arg0.getKeyCode());
}
}
The above code works perfectly on my friend’s laptop and throws this error on my laptop. I have running the code on Eclipse v4.2 (Juno) using Java 7.
I have also tested and run a lot of Java programs on my laptop all works well. This is the only program which gives such an error.
How can I fix this problem?
Многие новички, которые изучают программирование на Java при компиляции могут столкнуться с ошибкой «A JNI error has occurred, please check your installation and try again». Ошибка выскакивает даже если запускать совсем простой код типа «hello world!» как в примере ниже.
Пример простого кода Hello World!
Обычно компиляция проходит, но созданный класс не интерпретируется. У большинства пользователей ошибка появляется из-за следующих двух моментов:
- Неправильные пути в переменных средах;
- Вы компилируете файл более новой версией Java, а запустить пытаетесь на более ранней. Например компилировали при помощи Java 10, а запускаете на Java 9.
Как исправить ошибки при запуске и компиляции?
Первое, что следует проверить – пути в переменных средах. По списку первым например стоит путь:
«C:Program Files (x86)Common FilesOracleJavajavapath»
А в конце каталог до jdk:
C:Program Filesjdkbin
Операционная система компьютера находит екзешник «java.exe» и первым делом смотрит в «..javapath» и останавливает поиск. Вам нужен файл что лежит в «…jdkbin». В переменных средах сначала нужно поставить jdkbin, а потом уже javapath. В конечном результате путь должен быть примерно такой:
PATH=C:Program Filesjdkbin;C:Program Files (x86)Common FilesOracleJavajavapath;C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:WindowsSystem32OpenSSH;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program Files (x86)QuickTimeQTSystem
Во втором случае всё еще проще. Если вы компилируете используя более позднюю версию Java Runtime 54, то соответственно и запуск нужно производить в аналогичной версии. Сама строчка «hello has been compiled by a more recent version of the Java Runtime (class file version 54.0), this version of the Java Runtime only recognizes class file versions up to 53.0» как раз говорит нам об этом. Проверить это можно вбив фразу в тот же Гугл Переводчик.
Compiled by a more recent version of the Java Runtime
Выводы
Как видим с ошибкой» A JNI error has occurred, please check your installation and try again» при компиляции Java программы в основном сталкиваются новички. Решить проблему можно проверив версии Java при компиляции и запуске файлов программы. А так же просмотреть корректность путей к «jdkbin» и «javapath». Напишите в комментариях помогло ли вам решение и удалось ли запустить вашу первую программу.
Актуальное на этой неделе:
28.04.2023
Как охладить бойлеры в квесте Atomic Heart «В самое пекло»?
Atomic Heart предлагает захватывающий игровой процесс, который сочетает в себе различные элементы геймплея….
Далее
27.04.2023
Как получить атомные стикеры в Atomic Heart
Atomic Heart – это ожидаемая игра от российской студии Mundfish, которая предлагает игрокам уникальную смесь научной…
Далее
26.04.2023
Как отключить защиту Google Play Protect на Android
Google — крупная компания, у которой есть множество сервисов для мобильных устройств. Одним из таких сервисов…
Далее
10.04.2023
12 способов убрать надпись активация Windows 10 с экрана
…
Далее
Я новичок в изучении Java. Пытаюсь запустить “hello world!” Пример того, что я запускаю ниже.
class hello {
public static void main(String args[]) {
System.out.println("Hello, world!");
}
}
Javac компилирует, но созданный класс не интрепретируется. Выдается следующая ошибка:
***:~/Documents/JavaSampl$ javac hello.java
***:~/Documents/JavaSampl$ java hello
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: hello has been compiled by a more recent version of the Java Runtime (class file version 54.0), this version of the Java Runtime only recognizes class file versions up to 53.0
at java.lang.ClassLoader.defineClass1(java.base@9-internal/Native Method)
at java.lang.ClassLoader.defineClass(java.base@9-internal/ClassLoader.java:939)
at java.security.SecureClassLoader.defineClass(java.base@9-internal/SecureClassLoader.java:152)
at jdk.internal.loader.BuiltinClassLoader.defineClass(java.base@9-internal/BuiltinClassLoader.java:553)
at jdk.internal.loader.BuiltinClassLoader.access$200(java.base@9-internal/BuiltinClassLoader.java:88)
at jdk.internal.loader.BuiltinClassLoader$3.run(java.base@9-internal/BuiltinClassLoader.java:466)
at jdk.internal.loader.BuiltinClassLoader$3.run(java.base@9-internal/BuiltinClassLoader.java:460)
at java.security.AccessController.doPrivileged(java.base@9-internal/Native Method)
at jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(java.base@9-internal/BuiltinClassLoader.java:459)
at jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(java.base@9-internal/BuiltinClassLoader.java:406)
at jdk.internal.loader.BuiltinClassLoader.loadClass(java.base@9-internal/BuiltinClassLoader.java:364)
at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(java.base@9-internal/ClassLoaders.java:184)
at java.lang.ClassLoader.loadClass(java.base@9-internal/ClassLoader.java:419)
at sun.launcher.LauncherHelper.loadMainClass(java.base@9-internal/LauncherHelper.java:585)
at sun.launcher.LauncherHelper.checkAndLoadMain(java.base@9-internal/LauncherHelper.java:497)
Подскажите как это решить. Заранее спасибо!
При запуске какого-либо кода, написанного на Java, программист может получить сообщение об ошибке с текстом «A JNI error has occurred, please check your installation and try again». Обычно причиной ошибки выступает разница в версии компилятора и среды выполнения, из-за чего происходит некорректная интерпретация и выполнение имеющегося кода. Ниже разберём, в чём суть данной ошибки, как её исправить, а также отдельно укажем, как решить данную ошибку при запуске игры Minecraft.
Что такое JVM, JNI и JRE?
Как известно, программы, написанные на «Java», компилируются в байтовый код, который распознаётся виртуальной машиной Ява, называемой «JVM» (Java Virtual Machine). JVM по своей сути является компьютерным симулятором, и при запуске программы написанной на Java, распознаёт инструкции байтового кода, и переводит их в машинные инструкции собственной системы.
JVM должна обеспечивать удобный способ доступа к ресурсам системы – файлам, сетевым соединениям, видеокарте и другим компонентам. Механизмы доступа к этим ресурсам напрямую зависят от системы, в которой работает JVM. Для обеспечения своей работы виртуальная машина использует собственный интерфейс Java, называемый «JNI» (Java Native Interface).
Методы Java, использующие JNI для доступа к службам, квалифицируются термином «native». Квалификатор «native» сообщает виртуальной машине, что код для выполнения при вызове данного метода присутствует во внешней библиотеке. JVM ищет конкретный вызов библиотеки, который необходимо выполнить, на основе полного имени пути к методу и его аргументам. Существует специальное соглашение об именах, позволяющее сопоставить метод с конкретной ссылкой на внешнюю библиотеку.
Данный механизм JNI позволяет программам на Java кодировать имя переносимого метода. И скомпилированный в Виндовс код Java будет отлично запускаться на компьютерах под управлением Линукс или Мак.
Как мы уже писали выше, Java имеет собственные библиотеки для обеспечения базового взаимодействия с системой на уровне чтения-записи файлов, создания сетевых подключений и вывода изображения на экран. Они распространяются с JVM как часть среды выполнения Ява, известные как «JRE» (Java Runtime Environment), независимо от того, является ли она автономной JRE или включена в Java Development Kit (JDK).
Причина проблемы A JNI error has occurred, please check your installation and try again
Текст данной ошибки переводится как «Произошла ошибки INI, пожалуйста, проверьте вашу инсталляцию и попробуйте вновь». Данная ошибка, получаемая при запуске программы на JVM, указывает на проблему с запуском кода, связанного с собственным методом.
Причины проблемы могут быть следующими:
- Повреждена библиотека JDK / JRE, вследствие чего она не может быть загружена, и JVM не сможет выполнить код;
- Повреждён функционал операционной системы, вследствие чего последняя не в состоянии удовлетворить системный вызов, созданный нативным кодом;
- Имеются различия в номерах версий JRE (среда выполнения Java) и JDK (Java Development Kit), что также может вызывать ошибку JNI. Различия в номерах версий приведут к тому, что JVM откажется запускать код, потому что он был скомпилирован для совместимости с версией Java, превышающей максимальную версию, поддерживаемую JVM. Проще говоря, код может быть скомпилирован на одной версии Ява (например, 10), а пытается запускаться с помощью версии Ява 9;
- Также проблема может быть вызвана при попытке запустить файл.jar через командную строку, например с помощью команды java -jar File.jar.
Давайте разберём способы, позволяющие устранить ошибку JNI на вашем ПК.
Установите одинаковую версию JRE и JDK
Исправить ошибку «A JNI error has occurred» поможет обновление JRE и JDK до актуальных синхронных версий. Необходимо убедится в их одинаковой версии, для чего вызовите системную строку (нажмите Win+R, введите там cmd и нажмите ввод), и наберите там:
java -version и нажмите ввод.
Затем наберите: javac –version
Полученные результаты должны совпадать. Если они они не совпадают, то это сигнализирует о несоответствии версии компилятора и среды выполнения Java. Для решения проблемы рекомендуем установить однотипные и актуальные версии компилятора и среды выполнения, после чего вновь используйте команды «java -version» и «javac -version» для проверки, возвращают ли данные команды один и тот же номер версии.
Если версии синхронны, тогда ваш код Java необходимо будет скомпилировать с помощью компилятора новой версии. После этого ошибка «A JNI error has occurred, please check your installation» может быть устранена.
Правильно настройте переменные среды для Java
Для исправления ошибки «A JNI error has occurred» может понадобится настроить переменные среды для Java. Выполните следующее:
A JNI error has occurred, please check your installation and try again при компиляции java программы
Многие новички, которые изучают программирование на Java при компиляции могут столкнуться с ошибкой «A JNI error has occurred, please check your installation and try again». Ошибка выскакивает даже если запускать совсем простой код типа «hello world!» как в примере ниже.
Пример простого кода Hello World!
Обычно компиляция проходит, но созданный класс не интерпретируется. У большинства пользователей ошибка появляется из-за следующих двух моментов:
- Неправильные пути в переменных средах;
- Вы компилируете файл более новой версией Java, а запустить пытаетесь на более ранней. Например компилировали при помощи Java 10, а запускаете на Java 9.
Как исправить ошибки при запуске и компиляции?
Первое, что следует проверить – пути в переменных средах. По списку первым например стоит путь:
А в конце каталог до jdk:
Операционная система компьютера находит екзешник «java.exe» и первым делом смотрит в «..javapath» и останавливает поиск. Вам нужен файл что лежит в «…jdkbin». В переменных средах сначала нужно поставить jdkbin, а потом уже javapath. В конечном результате путь должен быть примерно такой:
PATH=C:Program Filesjdkbin;C:Program Files (x86)Common FilesOracleJavajavapath;C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:WindowsSystem32OpenSSH;C:Program Files (x86)NVIDIA CorporationPhysXCommon;C:Program Files (x86)QuickTimeQTSystem
Во втором случае всё еще проще. Если вы компилируете используя более позднюю версию Java Runtime 54, то соответственно и запуск нужно производить в аналогичной версии. Сама строчка «hello has been compiled by a more recent version of the Java Runtime (class file version 54.0), this version of the Java Runtime only recognizes class file versions up to 53.0» как раз говорит нам об этом. Проверить это можно вбив фразу в тот же Гугл Переводчик.
Compiled by a more recent version of the Java Runtime
Выводы
Как видим с ошибкой» A JNI error has occurred, please check your installation and try again» при компиляции Java программы в основном сталкиваются новички. Решить проблему можно проверив версии Java при компиляции и запуске файлов программы. А так же просмотреть корректность путей к «jdkbin» и «javapath». Напишите в комментариях помогло ли вам решение и удалось ли запустить вашу первую программу.
Error “A JNI error has occurred. Please check your installation and try again in Eclipse x86 Windows 8.1”
The above code works perfectly on my friend’s laptop and throws this error on my laptop. I have running the code on Eclipse v4.2 (Juno) using Java 7.
I have also tested and run a lot of Java programs on my laptop all works well. This is the only program which gives such an error.
How can I fix this problem?
41 Answers 41
I have been having this problem for a while, but now I have figured it out.
It turns out that Java JDK 12 has both the JRE and the JDK inside the bin folder of the Java 12 JDK. (I have always believed that JRE and JDK are different application, but it turns out things have changed.)
My problem was that I had Java JDK 12 installed on my computer. At the same time, I had Java 8 (JRE) Installed on my computer. So my computer was getting confused.
With my command prompt environment set up to run Java and Javac commands:
I typed the follow commands:
This gave me Java 8.
After that, I typed:
This gave me Java 12.
In other words, my program is getting compiled with Java 12 and I am trying to run with Java 8.
To solve the problem, I uninstalled Java 8 JRE from my computer.
I went back to command prompt to check if “java -version” and “javac -version” was returning the same version number, and yes, it was returning Java 12.
I tried recompiling my program again, and running it. It worked!!
Solution 1: Right-click on the class that contains the main method. Click on “Run As”. Click on “Java Application”. The keyboard shortcut is: Shift + Alt + X , J (while holding Shift and Alt , press X ; then release Shift and Alt and press J ).
Solution 2: As Professor mentioned, please make sure that java -version and javac -version are the same.
Note: Solution 1 is a quick fix and worked for me and a few other people. It may or may not work for you. I think Solution 2 is the proper way to solve it.
Running the jar from command line by:
I got information which made the problem clearer:
main/Main has been compiled by a more recent version of the Java Runtime
In this case, the jar was compiled with a version newer than jre supports.
Error: A JNI error has occurred, please check your installation and try again in Eclipse
Solution: Check your package name as it may be colliding with the package name in Java. Simply change the package name to resolve your issue. 🙂
I solved it by changing my ‘Compiler compliance level’. In Eclipse:
Menu Window → Preferences → Java → Compiler.
I had similar issues when using ‘java’ at the beginning of the package name, e.g. java.jem.pc
Check your console output, I was receiving:
I faced a similar problem with a project, in IntelliJ with Maven dependencies.
I solved it changing the dependencies scope from provided to compile.
IntelliJ:
Menu → File → Project structure → Modules → Dependencies → *Scope (provide to) → Compile.
In my case the issue was caused by the JDK version. To solve this I suggest to go into your POM file and check the <jdk.version>1.7</jdk.version>.
Afterwards, check the Java version in your cmd (Windows) or terminal (OS X or Linux) by typing: java -version.
Compare the version shown in the terminal/command prompt with what you have in your POM file. Make sure they are the same. Then run your project again.
You can check the console first to see the actual error message and then proceed by looking for answers for that error.
My console shows the error NoClassDefFound for the class jcommander.
Your error will probably be different from mine. The cause of my error is that the class jcommander is not in my M2 repository, so I just have to add that dependency in my pom.xml file. You can check if all the class dependencies are all declared and added in your current configuration and project build.
It can happen if the JDK version is different.
I also faced the same issue. By looking at the console that’s saying
the solution is: Check your package name of your project.
I was facing the same issue and in my case the compiler compliance level was selected as 14 in my Eclipse settings. In order to fix it, I changed it to the version of JDK on my machine i.e 1.8 and recompiled the project.
I have found that adding these lines of code to the pom.xml file of a Maven project solves similar issues for me:
Check your console. It says java.lang.SecurityException issue. Change your ‘package name’. I changed my package name from ‘java.assessment’ to ‘assesment’ and it worked for me. If somebody knows the root cause , let me know please.
I experienced the same issue, however in my case it was due to the Configuration settings in IntelliJ IDEA.
Even though the project SDK (File -> Project Structure) was set to Java 11, the JRE in the Run/Debug Configurations (Run -> Edit Configurations) was set to Java 8. After changing that to Java 11, it worked like a charm.
Possible solution
If none of these solutions worked for you then try this. I finally got mine working by deleting the two folders “.metadata” and “.recommenders” in the workspace folder.
You can find your workspace folder path by clicking on menu File → Switch Workspace → Other in the Eclipse application’s toolbar.
Now I am a complete noob crying my way through an software engineering degree at San Jose State University. So I am just sharing what worked for me without knowing much knowledge of why exactly.
I do not know what harm or headaches, or even if both aforementioned folders needed to be deleted. But in the end, it worked for me and it seems the application just recreates fresh versions of those folders anyway.
Just check small step.
Both javac and java versions are the same. If different, you will get this error.
My issue came from trying to disable the Maven nature from my project and then deleting the pom.xml file. This is bad, very bad, don’t do this. If you do, change it back to a Maven project and hopefully you can either restore your old pom.xml file or create a new one. As soon as I did that, it worked again.
EDIT: I recently ran across this problem again and this time it was because I had duplicate libraries in my classpath. The one Maven added (which started with /M2_REPO/. and then one I had added (which I should not have done). Even though Eclipse was reporting that it could not find the class, the actual problem was that I had given it two libraries with the same class and it didn’t know which one to use. Once I removed the second reference, it worked.
You can try: right click on the project and then click clean. After this run the project.
It works for me.
I faced a similar problem and then got the solution in the package name.
I kept the package name as java.basics. In the console I got a hint for that as it clearly said “Prohibited package name”. So I changed the package name and it worked.
Edit the “.classpath” and include the below tag:
<classpathentry kind=”con” path=”org.testng.TESTNG_CONTAINER”/>
This could solve your problem.
In my project I had changed my Maven POM file and removed the entry for maven-jar-plugin.
When you build a JAR file whose purpose is to be executable, you need to include this so that certain entries get written into the manifest. I opened the old project, copied that entry (with some modifications for project name) and it worked.
I think this happens because the name of your class is the same name of another class in the JDK. Help Eclipse to determine which one you are trying to run by selecting the package your class is in. Go to run configuration, select the project and the main class.
When you press the search button to select the main class, you will find options that have the same name but different package, select your class.
There was no information in my console so that sent me searching for additional solutions and found these — unique to the solutions presented here. I encountered this with Eclipse v4.7 (Oxygen) trying to run an old Ant build on a project.
Cause 1
I had configured Eclipse to use an external Ant install which was version 1.10.2 which apparently had classes in it that were compiled with JDK 9. In Eclipse I got the JNI error described above (running the Ant build at the command line gave me the renowned ‘unsupported major.minor version’ error — the Java I was using on the system was JDK 8).
The solution was to roll back to the embedded Eclipse version of Ant being 1.10.1. I verified this as the correct solution by downloading Ant 1.10.1 separately and reconfiguring Eclipse to use the new 1.10.1 externally and it still worked.
Cause 2
This can also happen when you have the Ant Runtime settings configured incorrectly in Eclipse’s Preferences. Depending on the version of Ant you’re running you will need to add the tools.jar file from the appropriate JDK to the classpath used for the Ant Runtime (Home Entries). More specifically, without a proper configuration, Eclipse will complain when launching an Ant target that the JRE version is less than a particular required version.
Essentially, ‘proper configuration’ means aligning each of the configuration items in Eclipse for running Ant so that they all work together. This involves the Ant Runtime Home entry (must point to an Ant version that is compatible with your chosen JDK — you can’t run Ant with JDK 8 when it was compiled against JDK 9); specifying the tools.jar that belongs to the JDK you want to run Ant with in the Ant Runtime settings; and lastly setting the JRE environment of your build script to the JDK you want to run Ant with in the External Tools Configuration.
All three of these settings need to agree to avoid the error described above. You’ll also need to consider the attributes used in your javac tag to ensure the JDK you’re using is capable of executing as you’ve directed (i.e., JDK 7 can’t compile code using source and target version 8).
Moreover
If you’re really just trying to run an Ant build script to compile code to an older JDK (e.g., less than 8 for Oxygen), this article helped gain access to run Ant against an older JDK. There are Ant plugin replacements for a handful of versions of Eclipse, the instructions are brief and getting the correct plugin version for your particular Eclipse is important.
Or more simply you can use this very good solution to do your legacy compile which doesn’t require replacing your Eclipse plugin, but instead changing the javac tag in your build script (while using the latest JDK).