【问题标题】:Won't open runnable jar exported from eclipse Mac OS不会打开从 eclipse Mac OS 导出的可运行 jar
【发布时间】:2021-04-17 05:21:56
【问题描述】:

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

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

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

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

另一方面,当我使用 windows 的朋友正在导出到可运行的 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,所以我无法真正找到问题。

【问题讨论】:

  • java -version 给你什么?因为该堆栈跟踪包含模块名称,并且模块直到 Java 9 才存在。
  • rafaelelkoby@MacBook-Pro ~ % java -version java version "15.0.1" 2020-10-20 Java(TM) SE Runtime Environment (build 15.0.1+9-18) Java HotSpot( TM) 64 位服务器 VM(内部版本 15.0.1+9-18,混合模式,共享)
  • 你去。您正在尝试使用通常不包含 JavaFX 的 Java 15.0.1 执行 JAR。您必须安装两个或更多版本的 Java。
  • 我该怎么做?有没有办法使用 java 8?
  • “蛮力”方法是在执行命令时提供 Java 8 的完整路径,而不仅仅是 java。至少这是 Windows 上的一个选项。如果您希望 Java 8 成为默认设置,则必须研究如何在 MacOS 上执行此操作(我只知道 Windows)。

标签: java eclipse macos javafx-8


【解决方案1】:

因此,在 cmets 的 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,因此它将成为默认版本。

也为我工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-21
    • 2017-05-13
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多