微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不会打开从 eclipse Mac OS 导出的可运行 jar

如何解决不会打开从 eclipse Mac OS 导出的可运行 jar

我正在运行 MacOS Big Sur(英特尔 MacBook Pro 2020)并且我正在将 eclips 用于一个大学项目。

该项目是用 java 编写的,对于 GUI,我使用的是 JFX。

在使用 eclipse 时,包括 JavaFX 代码在内的所有内容都可以正常打开并运行。

当我将项目导出到可运行的 jar 时,它要求打开它,然后说有一个错误

另一方面,当我使用 windows 的朋友导出到可运行的 jar 时,它对他们来说工作正常。

项目 git 是 Here to watch

我尝试运行它 throw terminal 以查看问题,但收到以下消息:

 rafaelelkoby@MacBook-Pro ~ % java -jar Server.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: javafx/application/Application
    at java.base/java.lang.classLoader.defineClass1(Native Method)
    at java.base/java.lang.classLoader.defineClass(ClassLoader.java:1016)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
    at java.base/java.net.urlclassloader.defineClass(urlclassloader.java:514)
    at java.base/java.net.urlclassloader$1.run(urlclassloader.java:422)
    at java.base/java.net.urlclassloader$1.run(urlclassloader.java:416)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:691)
    at java.base/java.net.urlclassloader.findClass(urlclassloader.java:415)
    at java.base/java.lang.classLoader.loadClass(ClassLoader.java:589)
    at java.base/java.lang.classLoader.loadClass(ClassLoader.java:522)
    at java.base/java.lang.class.forName0(Native Method)
    at java.base/java.lang.class.forName(Class.java:468)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:59)
Caused by: java.lang.classNotFoundException: javafx.application.Application
    at java.base/java.net.urlclassloader.findClass(urlclassloader.java:435)
    at java.base/java.lang.classLoader.loadClass(ClassLoader.java:589)
    at java.base/java.lang.classLoader.loadClass(ClassLoader.java:522)
    ... 13 more

使用 java 8 JDK 应该包含 JFX,所以我真的找不到问题。

解决方法

所以在评论中得到来自 Slaw 的帮助后,我发现了问题以及如何解决。

我的问题是我试图使用 Java 15.0.1 执行一个 jar 文件,但在 JavaFX 中不能很好地工作。

首先检查您是否安装了 Java 8 JDK。

并找到Mac中的虚拟机文件夹witch默认在java文件夹下的library文件夹。

检查您是否安装了 1.8 版本

然后通过命令查看执行jar的java版本是什么:

java -version

然后如果它不同,则 java 8 运行以下内容:

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

然后再次运行并检查您是否使用了 java 8

java -version

检查它是否已更改并使用 jar 运行

java -jar JarName.jar 

如果有什么不明白的请评论,我会修改。

希望对你有帮助:)

========================================

另一种选择:

如果您的代码使用的是 java 8

如果 java -version 告诉您您使用的是不同的东西,那么 1.8.X

在 MacOS 上,转到位于以下位置的虚拟机文件夹 /Library/Java/JavaVirtualMachines

并且只保留您使用的 1.8.X,因此它将成为默认值。

也为我工作

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。