gpt4 book ai didi

javafx-2 - JavaFX2 - 在没有 GUI 的情况下启动应用程序的选项

转载 作者:行者123 更新时间:2023-12-05 02:20:21 31 4
gpt4 key购买 nike

我正在开发将在 Linux 下运行的 JavaFx 应用程序,无论是在支持 GUI 的环境还是在不支持 GUI 的环境中。意思是,如果我连接到应用程序将在应用程序启动时使用“ssh -X”运行的机器,GUI 应该打开,如果我只使用“ssh”(不带 -X)连接,那么应用程序的控制台版本应该启动。

如何在使用 JavaFx 时实现这一目标?

我试过以下方法:

public class Main extends Application {

@Override
public void start(Stage primaryStage) throws Exception {

FXMLLoader loader = new FXMLLoader(getClass().getClassLoader().getResource("MainGui.fxml"));
SplitPane page = null;
try {
page = (SplitPane) loader.load();
} catch (IOException e) {
System.exit(1);
}

Scene scene = new Scene(page);
primaryStage.setScene(scene);
primaryStage.setResizable(false);

primaryStage.show();

}

public static void main(String[] args) {

if (args.length == 1 && args[0].equals("nogui")) {
System.out.println("NOGUI SELECTED");
} else {
launch(args);
}
}
}

但它不起作用,当我尝试通过 SSH 连接到另一台没有 -X 选项的机器时,我仍然收到错误:

Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.UnsupportedOperationException: Unable to open DISPLAY
at com.sun.glass.ui.gtk.GtkApplication.<init>(GtkApplication.java:68)
at com.sun.glass.ui.gtk.GtkPlatformFactory.createApplication(GtkPlatformFactory.java:41)
at com.sun.glass.ui.Application.run(Application.java:146)
at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:257)
at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:211)
at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:675)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:337)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
... 5 more

我还注意到,如果我在具有 GUI 的环境中运行应用程序,提供“nogui”命令行选项,我会收到打印输出“NOGUI SELECTED”,但应用程序不会结束它的执行,而是会卡在那里。

你能帮我实现这个目标吗?

最佳答案

我不确定究竟是什么导致了您所面临的这个问题。但已知 JavaFX 存在线程问题,这可能与 JavaFX 主类生成子线程有关。但我的知识不足以回答这个问题。

但我可以做的是,如果您正在寻找替代方案,请提供替代方案。您可以使用 main 方法创建一个单独的类(不扩展 Application 类),然后根据需要从那里调用 Main 类,这样您的应用程序将在传递 nogui 时退出。

public class NewMain {
public static void main(String[] args) throws Exception {
if (args.length == 1 && args[0].equals("nogui")) {
System.out.println("NOGUI SELECTED");
} else {
Main.launch(Main.class, args);
}
}
}

如果您不想传递参数,那么您可以简单地使用 Main.launch(Main.class) 而不是 Main.launch(Main.class, args)。我还没有对此进行测试,但它应该可以工作。

关于javafx-2 - JavaFX2 - 在没有 GUI 的情况下启动应用程序的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39489614/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com