【问题标题】:.jar file works in IntelliJ but JVM error occurs when .jar is run outside of IntelliJ.jar 文件在 IntelliJ 中工作,但是当 .jar 在 IntelliJ 之外运行时会发生 JVM 错误
【发布时间】:2020-01-21 14:29:02
【问题描述】:

我是 Java 和 Stack Overflow 的新手,我在 IntelliJ 中创建了一个 Java 项目,并通过构建工件和构建 .jar 文件制作了一个 .jar 文件以在没有 IntelliJ 的情况下运行它。该程序使用机器人通过按 Windows 和 R 键打开运行窗口,将鼠标移动到我的计算机分辨率(1366 x 768)的框内,单击,键入 cmd 并按 Enter,将鼠标移到在 cmd 窗口中,单击并键入 whoami 并按 Enter。这在 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);
        }
    }
}

线程.sleep(20000);在代码的末尾是为了防止它陷入无限循环,让我停止程序。

我的 java 是最新的,IntelliJ 也是最新的,我看不出我做错了什么。

【问题讨论】:

  • 那么当你构建项目时,intellij会在target文件夹中创建一个jar吗?这是您应该从命令行运行的内容。我怀疑,如果它正在创建它,那么库不会被包含在内。

标签: java intellij-idea jar jvm


【解决方案1】:

假设完全错误看起来像这样:

错误:发生 JNI 错误,请检查您的安装并 重试线程“主”中的异常 java.lang.UnsupportedClassVersionError: 机器人/RobotTest 已经 由更新版本的 Java 运行时编译(类文件 55.0 版),这个版本的 Java 运行时只识别类 文件版本高达 52.0

我想说您的系统中可能有冲突的 JDK/JRE 安装。如错误所述,.jar 是由 Java 运行时的更新版本(IntelliJ IDEA 使用的那个)编译的,而您现在使用的是旧版本。

  • 在 IntelliJ IDEA 中检查用于运行您的项目的 JDK 版本(文件 | 项目结构 | 项目 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

【讨论】:

  • 感谢您的帮助!我的问题已解决,因为我有一个 2 年前发布的 Java 版本,并且我的计算机上安装了 JDK 13!谢谢! :)
猜你喜欢
  • 2021-02-08
  • 2021-06-12
  • 2020-02-17
  • 1970-01-01
  • 2017-06-30
  • 2021-01-15
  • 2013-11-14
  • 2017-05-14
  • 1970-01-01
相关资源
最近更新 更多