Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >无法使用用Java 17编译的JRE 1.8_311运行JAR

无法使用用Java 17编译的JRE 1.8_311运行JAR
EN

Stack Overflow用户
提问于 2021-11-11 12:46:08
回答 1查看 8.3K关注 0票数 0

我正在使用JavaFX和OpenJDK 17创建一个应用程序。项目语言级别设置为17。在创建JAR (构建工件)之后,我尝试使用JRE 1.8.0_311来执行它。当我这样做时,我会得到这样的错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java.lang.UnsupportedClassVersionError: Main has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:601)
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main"

据我理解,这个错误意味着我的代码是用Java 17编译的,但是我的JRE只能运行Java 8代码。我试着用.jar运行OpenJDK,它可以工作。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-11 13:32:33

是的,您正确地理解了这个问题:为Java 17编译的应用程序不能在Java8运行时上运行。

你有选择:

  • 将运行时更改为Java 17。
  • 如果您的代码库不使用Java 9及更高版本的特性,则为Java 8编译应用程序。
  • 将Java运行时捆绑在应用程序中。这样在编译时就有了完全的控制,所以您可以在Java 17上运行的同时为Java 17编译。

现代Java提供了http://openjdk.java.net/jeps/282 & https://openjdk.java.net/jeps/392工具,以帮助将Java运行时捆绑到应用程序中。通过https://en.wikipedia.org/wiki/Java_Platform_Module_System,可以将Java运行时简化到应用程序实际使用的部分。

如果你感觉到需要,并且有勇气,最先进的方法是用甲骨文的GraalVM技术编写一个本地应用程序。

你评论说:

基本上,java 17没有JRE吗?

JRE ()正在成为过去,因为Oracle不再期望最终用户在他们的系统上安装Java运行时。JRE只是JDK的一个子集,删除了一些工具。

如果像上面讨论的那样捆绑Java运行时,那么JRE就无关紧要了,因为新的现代工具将只包含应用程序所需的部分。

您可以从几个供应商中的任何一个获得Java 17实现。这些供应商包括亚马逊、阿祖尔系统、甲骨文、微软、阿佐门、SAP、BellSoft、Pivotal、Red /IBM、FreeBSD端口和软件包。有些供应商提供支持,有些则不提供支持。有些人收费,有些人不收费。

顺便说一句,另一种选择是构建您的JavaFX应用程序,而不需要绑定Java运行时,也不需要OpenJFX/JavaFX库。至少有两个供应商提供了包含OpenJFX/JavaFX库的Java运行时版本: Azul系统(ZuluFX)和BellSoft (LibericaFX)。只有当您或您的客户控制用户的机器(如企业环境、学校等)时,这种方法才是可行的。

我建议阅读这两份白皮书:

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69934727

复制
相关文章
使用指定版本jre运行jar包
前半部分指定java路径 后半部分指定jar包路径 然后双击运行该bat文件就可以啦
iot-me.club
2022/02/11
2.4K0
java 17运行jar报错:java.lang.UnsatisfiedLinkError: Can't load library:
zeekling
2023/10/17
7300
java 17运行jar报错:java.lang.UnsatisfiedLinkError: Can't load library:
The following packages were automatically installed and are no longer required:
zeekling
2023/09/17
1.2K0
MyEclipse中设置 jdk 和 jre 编译运行环境
1、设置默认使用的JDK和JRE环境。 具体步骤:菜单window-preferences-java-Installed JRES。 点中了,右边的窗口点ADD按钮,记住选择添加安装了Java目录下的JDK目录,而不是JRE目录。 天价后,在列表中选择你要使用的那个jdk版本即可。 然后Compiler项下,选择编译的jdk级别就可以了。
Lcry
2022/11/29
7620
java -jar运行MR程序
1、一般的做法都是使用hadoop jar的形式提交任务。 vi bin/hadoop.jar image.png 其实内部调用了RunJar.java 用来读取hadoop环境参数,配置文件等。
sparkle123
2018/07/04
1.4K0
Java jar包运行方式
特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出
无敌小菜鸟
2020/05/21
2.9K0
Java jar包运行方式
Java Jar包运行参数
Java程序编译为Jar包后,使用nohup java [-options] -jar jarfile > LOG_FILE 2>&1 &来后台运行。 本文主要是options参数的配置简单讲解。
许杨淼淼
2019/12/29
4.8K0
搭建Java环境JDK,和运行环境JRE
摘要总结:本文主要讲解了如何搭建Java环境JDK,和运行环境JRE,以及环境变量配置和验证。
别先生
2017/12/29
2.4K0
搭建Java环境JDK,和运行环境JRE
java编译过程_Java编译运行过程
在上一篇文章中,我们了解了第一个Java入门程序,以及如何编译和运行第一个Java程序。本文主要了解以下编译和运行Java程序时会发生什么。此外,我们还会分析一些常见的问题。
全栈程序员站长
2022/08/12
2.1K0
java编译过程_Java编译运行过程
Java -jar参数详解:掌握Java可执行JAR文件的运行技巧
作为一种常用的开发语言,Java经常使用可执行的JAR(Java Archive)文件来打包和分发应用程序。使用java -jar命令运行JAR文件是一种方便快捷的方式。本文将详细介绍java -jar命令的各种参数,帮助您充分利用这个功能。
修己xj
2023/08/25
3.7K0
Java -jar参数详解:掌握Java可执行JAR文件的运行技巧
不需要jre运行Java?你没看错!
今天我们要介绍的是spring-native,它可以让你的spring boot程序,体验graalvm编译器的特性,把你的应用直接编译成native的!
xjjdog
2021/07/07
1.1K0
不需要jre运行Java?你没看错!
java编译和运行
一个java应用程序由若干个类组成,这些类可以在一个源文件,也可以分布在若干个源文件
全栈程序员站长
2022/07/01
9390
java编译和运行
编译正常运行,打jar包运行报错(找不到文件路径)
Maven项目下,从resouces目录下把文件读入内存时,例如将sql文件用文件输入流读入时,编译时运行正常,但打成jar包后运行jar包报错:
VIBE
2022/11/18
3.3K0
编译正常运行,打jar包运行报错(找不到文件路径)
Java学习-如何编译适配java版本的jar包
在日常浏览github社区的过程中,会碰到一些好用的java项目,但作者往往只提供源码或与本地jdk不适配的jar包,这时候可以自行进行编译
hyyrent
2022/12/26
9100
Java学习-如何编译适配java版本的jar包
Minecraft——Forge1.16.5模组开发(36.2.20)——(1)开发环境搭建
==声明==:本文旨在提升作者的代码逻辑记忆能力,加深思考mojang的代码底层逻辑,更新mojang由于版本迭代替换掉的方法名称和实体名称,部分转载自Forge官方开发文档,指路->1.16.5开发,源代码GitHub->BosonSourceCode ==同时==:各位也可前往GitHub查看minecraft中文开发文档,指路->minecraft中文开发指南
roydonGuo
2022/11/02
2.3K0
Minecraft——Forge1.16.5模组开发(36.2.20)——(1)开发环境搭建
Java Jar源码反编译工具对比
下载地址:https://github.com/deathmarine/Luyten
Erwin
2020/09/27
5.8K0
Java jar 如何防止被反编译
java作为解释型的语言,其高度抽象的特性意味其很容易被反编译,容易被反编译,自然有防止反编译措施存在。今天就拜读了一篇相关的文章,受益匪浅,知彼知己嘛!!之所以会对java的反编译感兴趣,那是因为自己在学习的过程中,常常需要借鉴一下别人的成果(你懂的...)。或许反编译别人的代码不怎么道德,这个嘛......
用户2781897
2021/11/10
3.4K0
java9导出运行springboot的精简版jre
为了分发一个springboot项目,在不考虑目标机器是否有jre的情况下,携带一个jre环境是一个选择。本文就尝试从原生的jdk 9.0.1 精简一个jre供分发。
pollyduan
2019/11/04
1.3K0
Windows开机自启动运行Java的jar包
在该目录下新建web-start.bat文件,命名可自定义即可,如:xxxx.bat,但必须以.bat结尾
joshua317
2022/05/10
3.7K1
java 命令行运行jar包_java命令行运行jar包详解2016
大家好,又见面了,我是你们的朋友全栈君。 java命令行运行jar包详解2016 jar包是什么呢?jar是java archive file 的简写。从名字就可以知道,它的应用与Java息息相关
全栈程序员站长
2022/11/09
2.6K0
java 命令行运行jar包_java命令行运行jar包详解2016

相似问题

使jar在32位jre中运行

34

如何使用jre编译.jar?

30

在java jre上使用单个jar文件运行groovy未编译脚本

222

足以运行jar的JRE版本

11

Java编译JRE问题

65
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文