无法在MacOS上启动JavaFX应用程序(使用Java 8)
第一次使用JavaFX时,我试图用一个无法在MacOS上启动JavaFX应用程序(使用Java 8),java,eclipse,macos,javafx,Java,Eclipse,Macos,Javafx,第一次使用JavaFX时,我试图用一个helloworld来测试它窗口 我正在Mojave10.14.5的MacOS上使用Java8(更新211)和Eclipse 我正在做这个项目: 我将我认为需要的所有javafxjar放在构建路径中(也许我缺少一些jar?) 我正在尝试使用以下代码使用JavaFX打开一个窗口: import javafx.application.Application; import javafx.event.ActionEvent; import javafx.even
helloworld来测试它代码>窗口
我正在Mojave10.14.5的MacOS上使用Java8(更新211)和Eclipse
我正在做这个项目:
我将我认为需要的所有javafxjar放在构建路径中(也许我缺少一些jar?)
我正在尝试使用以下代码使用JavaFX打开一个窗口:
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Test extends Application{
public static void main(final String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Hello World!");
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
}
您的配置将无法以这种方式工作。您没有提供足够的详细信息来给您一个明确的答案,但以下是一些问题:
Oracle的Java8(用于Mac)已经包含了JavaFX,因此您添加的库不是不需要,就是更可能混淆了VM
如果您的Java是不包含JavaFX的OpenJDK 8,那么您添加的库也是无用的,因为它们看起来像Java11或更高版本的库,并且与Java8不兼容
请查看此处以找到适合您的环境的正确设置:
将这两行代码添加到main方法中,以了解您在运行时实际使用的是哪个版本的Java和JavaFX
System.out.println("java.runtime.version: " + System.getProperty("java.runtime.version", "(undefined)"));
System.out.println("javafx.version: " + System.getProperty("javafx.version", "(undefined)"));
输出应如下所示:
java.runtime.version: 1.8.0_212-b10
javafx.version: 8.0.212
问题解决了!问题在于这个包:javafx-swt.jar
在EclipseIDEforMac中,当Java程序引用SWT时
IDE自动添加VM选项-XstartOnFirstThread。大多数
在某些情况下,这种自动添加是有帮助的。然而,有一种情况
添加此VM选项时会导致问题,即Eclipse
SWT应用程序的项目,其中还包括一个或多个“纯”
不与SWT类互操作的JavaFX类。“纯粹的”
从这样一个Eclipse项目启动的JavaFX应用程序将
挂起,因为它不需要-XstartOnFirstThread。
()
在运行配置的Arguments选项卡中,您可以找到一个复选框,要求不要使用-XstartOnFirstThread。取消选中它,它会工作。您是从ide还是从命令行运行它?JavaFX是Java8的一部分。是您自己添加引用的库,还是Eclipse自动添加它们?您使用的是什么java实现?是甲骨文的吗?您使用的是哪一个Eclipse版本?代码在相同OS和JRE版本的命令行中正确运行。我在IDE(Eclipse 4.9.0)中运行它。使用OracleJava8(211)我使用的是Oracle的Java8,如果我试图删除我在后期编辑中输入的错误库,我希望使用Java8而不升级到Java12,我已经更新了上面的答案。看来你已经破坏了你的系统设置。您的代码使用Oracle Java 8在我的Mac上运行得很好。谢谢,我尝试将println放在main中(在启动方法之前),但它不打印任何内容是的,但我给您的上面的链接中也记录了这一点。(3.添加VM参数。警告:确保未选中选项:使用SWT启动时使用-XstartOnFirstThread参数。)
java.runtime.version: 1.8.0_212-b10
javafx.version: 8.0.212