java - 无法打开从 eclipse Mac OS 导出的可运行 jar

标签 java eclipse macos javafx-8

我正在运行 MacOS Big Sur(Intel MacBook Pro 2020),并且正在将 eclips 用于大学项目。

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

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

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

另一方面,当我使用 Windows 的 friend 导出到可运行的 jar 时,它对他们来说工作得很好。

项目git是Here to watch

我尝试运行它抛出终端来查看问题,并收到以下消息:

 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中的虚拟机文件夹,默认位于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 上,转到虚拟机文件夹: /库/Java/JavaVirtualMachines

并仅保留您使用的 1.8.X,这样它将成为默认版本。

也为我工作

关于java - 无法打开从 eclipse Mac OS 导出的可运行 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65680884/

相关文章:

java - 无法从 WSDL 创建 Web 服务(netbeans : There is no service in specified WSDL file.)

java - 如果缺少 @PreAuthorize 注释,则 Spring Security : Deny access to controller methods,

java - MySQL 日期时间 <-> Java 日期

java - 在 Eclipse 中一次运行多个调试实例

macos - Homebrew 软件更新失败 : "Please, commit your changes or stash them before you can merge"

linux - 获取mac os服务状态的命令

java - Xpath 无法查询带有命名空间的标签

java - maven-antrun-plugin 出现 "Plugin execution not covered by lifecycle configuration"错误

java - Android 日期选择器监听器不能工作超过一次..

linux - 在 POSIX 环境中如何分配大于 0 字节的文件而不写入内容?