当前位置: 首页 > 知识库问答 >
问题:

Java-JAR文件无法从终端命令行执行

温嘉玉
2023-03-14

我对Java比较陌生,我完成了教程,其中解释了如何创建和运行JAR文件的示例。您能告诉我在命令行中运行JAR应该做些什么吗?

我创建了JAR文件:

此Jar文件已复制到桌面

我希望命令:java-jar06_02.jar应该执行文件。

在IntelliJ终端中,我切换到桌面目录(文件所在)并运行:java-jar 06\u 02。罐子

这会导致错误:

错误:发生JNI错误,请检查您的安装并在线程“main”java中重试异常。lang.UnsupportedClassVersionError:com/example/java/Main由最新版本的java运行时(类文件版本55.0)编译,此版本的java运行时仅识别高达52.0的类文件版本

at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

同时,如果我从IntelliJ GUI执行JAR文件,它正在工作:

我的项目设置为:

请帮我解决这个错误。

共有2个答案

巫健柏
2023-03-14

您已经为Java 11(类文件格式版本55)编译了代码,并尝试用Java 8(类文件格式版本52)运行它。

Java 8不理解更高版本Java中的类文件格式。

龙承德
2023-03-14

当您键入java-jar-myjar时。jar在命令行上,您的命令行首先会做各种事情来理解您真正的意思。特别是,java被转换为某些可执行文件的绝对路径。它通过扫描称为路径的环境变量来实现这一点(通常,每个shell都是不同的,但大多数都是这样),然后依次检查每个shell是否包含名为java的文件。exe。如果是的话,那就是你的意思。

java。您的shell以这种方式找到的exe是java。来自JDK8安装的exe。我知道,因为类文件v52是JDK8生成的/是JDK8可以运行的最大值。

正如您的intellij屏幕截图所示,您的代码至少配置为JDK11(我知道,因为版本55是JDK11s及更高版本在-版本11模式下产生的,这就是您正在做的,给定这些屏幕截图)。

因此,修复是以下3种修复之一:

  • 使用JDK11显式运行此操作。不要运行java-jar-foo。jar,运行C:\Program Files\Adoptium\JDK11\bin\java。exe-jar myjar。jar或者诸如此类的东西(那条路径不太正确,我不知道你的硬盘是什么样子,但你知道的)

大概你应该在这里研究第二种选择。

 类似资料:
  • 我知道有很多关于这个的线索,但是没有一个对我有用。以下是我试图做的: Javac并从我的java代码中运行一个文件。它适用于视窗系统,但我想让它也适用于UNIX。代码如下: 问题是,在UNIX系统上,它的行为“不可预测”,例如: 打开图像,但 它什么也没做。没有按摩。 我非常感谢您的任何意见。 更新--------------------------------------------------

  • 关于通过Java向终端发送命令,我遇到了一个非常令人困惑的问题。我有这个密码: 第一个命令是这个"useradd user-p密码-d /home/ftp/test/-s /bin/false",第二个应该是这个回显用户名:new_password|chpasswd,第一个命令工作没有任何问题,并创建了我定义的用户"服务器"变量,但当我试图执行第二个命令来改变用户传递此命令可能永远不会发生,输出为

  • 问题内容: 我正在尝试从Java执行SOX命令,但不幸的是,它每次都会返回错误。其他所有SOX命令都可以正常运行!!这是代码: 当我在终端中执行相同的sox命令时,它的工作正常。我真的不明白问题是什么!是因为“ |” 符号?? 问题答案: 问题是Runtime.exec()无法理解shell概念,例如“ |”。而是尝试: 问题是exec直接运行二进制文件而不调用shell。“ |” 字符只能被外壳

  • 我没有得到“你好”:请想知道为什么和做什么

  • 问题内容: 我有以下目录层次结构: 在这里,SigarTest是程序包名称。根文件夹位于jdk的bin文件夹中。从那里,我运行以下命令来创建我的项目的jar文件- 其中tools.jar,mongo-2.7.3.jar和sigar.jar是必需的,并且与根目录(jdk的bin文件夹)位于同一文件夹中。但是,运行它,我得到 我究竟做错了什么 ? 问题答案: 使用 目录 选项 哪些 临时改变目录( D

  • 我无法从cmd windows 10执行java jar文件。我使用Intellji生成了一个jar文件。 当我运行命令Java-jar时,我得到了这个错误 错误:无法访问jarfile 我试着用管理权限运行cmd,但同样的错误。类路径设置正确。jar文件位于正确的目录中。 是什么导致了这个问题?谢谢