.jar 文件在 IntelliJ 中工作,但当 .jar 在 IntelliJ 之外时 运行 时发生 JVM 错误
.jar file works in IntelliJ but JVM error occurs when .jar is run outside of IntelliJ
我是 Java 和 Stack Overflow 的新手,我在 IntelliJ 中创建了一个 Java 项目,并在没有 IntelliJ 的情况下通过构建工件制作了一个 .jar 文件 运行 ,并构建 .jar 文件。该程序使用机器人通过按Windows和R键打开运行window,将鼠标移动到我的电脑分辨率(1366 x 768)的框内,点击,键入 cmd 并按回车键,将鼠标移到 cmd window 内,单击,然后键入 whoami 并按回车键。这在 IntelliJ 内部工作得很好,但在它之外我得到这个错误:
Java 虚拟机启动器
错误:发生了 JNI 错误,请检查您的安装并重试。
当我单击“确定”时,会打开另一个文本框:
Java 虚拟机启动器
发生 java 异常。
我的 .java 文件中的代码是:
import java.awt.AWTException;
import java.awt.event.KeyEvent;
import java.awt.Robot;
import java.awt.event.InputEvent;
public class RobotTest {
public static void main(String[] args) throws Exception {
Robot r = new Robot();
while (true) {
r.keyPress(KeyEvent.VK_WINDOWS);
r.keyPress(KeyEvent.VK_R);
r.keyRelease(KeyEvent.VK_WINDOWS);
r.mouseMove(300,620);
r.mousePress(InputEvent.BUTTON1_DOWN_MASK);
r.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
Thread.sleep(100);
r.keyPress(KeyEvent.VK_C);
r.keyPress(KeyEvent.VK_M);
r.keyPress(KeyEvent.VK_D);
r.keyPress(KeyEvent.VK_ENTER);
Thread.sleep(150);
r.mouseMove(400,200);
r.mousePress(InputEvent.BUTTON1_DOWN_MASK);
r.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
r.keyPress(KeyEvent.VK_W);
r.keyPress(KeyEvent.VK_H);
r.keyPress(KeyEvent.VK_O);
r.keyPress(KeyEvent.VK_A);
r.keyPress(KeyEvent.VK_M);
r.keyPress(KeyEvent.VK_I);
r.keyPress(KeyEvent.VK_W);
r.keyPress(KeyEvent.VK_ENTER);
r.mouseMove(400, 200);
Thread.sleep(20000);
}
}
}
Thread.sleep(20000);代码末尾是为了防止它陷入无限循环,让我停止程序。
我的 java 是最新的,IntelliJ 也是,我看不出我做错了什么。
假设完整错误如下所示:
Error: A JNI error has occurred, please check your installation and
try again Exception in thread "main"
java.lang.UnsupportedClassVersionError: robot/RobotTest 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
我会说您的系统中可能有冲突的 JDK/JRE 安装。正如错误所述,.jar 是由 Java 运行time(IntelliJ IDEA 使用的版本)的更新版本编译的,而您现在使用的是旧版本。
- 检查哪个版本的 JDK 用于 运行 您在 IntelliJ IDEA 中的项目(文件 | 项目结构 | 项目 SDK)。 JDK 12 在我的例子中。
- 运行 命令提示符中的以下内容:
java -version
javac -version
- 如果它们不同,请卸载旧环境并重新运行 JAR。
在我的例子中,java 是 1.8 版,而 javac 是 12 版。我从我的系统中卸载了 1.8 JRE,确保 java -version
也给了我 12 并且并成功从 cmd 重新运行 java -jar path\to\artifact.jar
。
我是 Java 和 Stack Overflow 的新手,我在 IntelliJ 中创建了一个 Java 项目,并在没有 IntelliJ 的情况下通过构建工件制作了一个 .jar 文件 运行 ,并构建 .jar 文件。该程序使用机器人通过按Windows和R键打开运行window,将鼠标移动到我的电脑分辨率(1366 x 768)的框内,点击,键入 cmd 并按回车键,将鼠标移到 cmd window 内,单击,然后键入 whoami 并按回车键。这在 IntelliJ 内部工作得很好,但在它之外我得到这个错误:
Java 虚拟机启动器 错误:发生了 JNI 错误,请检查您的安装并重试。
当我单击“确定”时,会打开另一个文本框:
Java 虚拟机启动器 发生 java 异常。
我的 .java 文件中的代码是:
import java.awt.AWTException;
import java.awt.event.KeyEvent;
import java.awt.Robot;
import java.awt.event.InputEvent;
public class RobotTest {
public static void main(String[] args) throws Exception {
Robot r = new Robot();
while (true) {
r.keyPress(KeyEvent.VK_WINDOWS);
r.keyPress(KeyEvent.VK_R);
r.keyRelease(KeyEvent.VK_WINDOWS);
r.mouseMove(300,620);
r.mousePress(InputEvent.BUTTON1_DOWN_MASK);
r.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
Thread.sleep(100);
r.keyPress(KeyEvent.VK_C);
r.keyPress(KeyEvent.VK_M);
r.keyPress(KeyEvent.VK_D);
r.keyPress(KeyEvent.VK_ENTER);
Thread.sleep(150);
r.mouseMove(400,200);
r.mousePress(InputEvent.BUTTON1_DOWN_MASK);
r.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
r.keyPress(KeyEvent.VK_W);
r.keyPress(KeyEvent.VK_H);
r.keyPress(KeyEvent.VK_O);
r.keyPress(KeyEvent.VK_A);
r.keyPress(KeyEvent.VK_M);
r.keyPress(KeyEvent.VK_I);
r.keyPress(KeyEvent.VK_W);
r.keyPress(KeyEvent.VK_ENTER);
r.mouseMove(400, 200);
Thread.sleep(20000);
}
}
}
Thread.sleep(20000);代码末尾是为了防止它陷入无限循环,让我停止程序。
我的 java 是最新的,IntelliJ 也是,我看不出我做错了什么。
假设完整错误如下所示:
Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.UnsupportedClassVersionError: robot/RobotTest 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
我会说您的系统中可能有冲突的 JDK/JRE 安装。正如错误所述,.jar 是由 Java 运行time(IntelliJ IDEA 使用的版本)的更新版本编译的,而您现在使用的是旧版本。
- 检查哪个版本的 JDK 用于 运行 您在 IntelliJ IDEA 中的项目(文件 | 项目结构 | 项目 SDK)。 JDK 12 在我的例子中。
- 运行 命令提示符中的以下内容:
java -version
javac -version
- 如果它们不同,请卸载旧环境并重新运行 JAR。
在我的例子中,java 是 1.8 版,而 javac 是 12 版。我从我的系统中卸载了 1.8 JRE,确保 java -version
也给了我 12 并且并成功从 cmd 重新运行 java -jar path\to\artifact.jar
。