是否有人能够举例说明使用Platform.runLater和SwingUtilities.invokeLater和javaFX。我试图使用两者,我收到的消息是:
Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: Error: class Window$2 is not a subclass of javafx.application.Application
at javafx.application.Application.launch(Unknown Source)
at Window$2.run(Window.java:50)
at com.sun.javafx.application.PlatformImpl.lambda$null$164(Unknown Source)
at com.sun.javafx.application.PlatformImpl$$Lambda$47/389777815.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(Unknown Source)
at com.sun.javafx.application.PlatformImpl$$Lambda$46/1775282465.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$141(Unknown Source)
at com.sun.glass.ui.win.WinApplication$$Lambda$37/1109371569.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Class文件被称为Window,我不知道为什么它会说Window $ 2,我会假设$ 2是内存中的一些垃圾打印出来的错误。我正在使用的代码如下。 arguments是一个静态String [],因为args不是静态的。另外,当我使用launch(Window.class,arguments)时;它会抛出错误然后快速消失,但是当我不包含Window.class时它根本不起作用。它不应该假设它从同一个类调用启动方法吗?此外,启动(args)在方法之外工作正常。
public static void main (String[] args) {
arguments = new String[args.length];
System.arraycopy(args, 0, arguments, 0, args.length);
Platform.runLater(new Runnable() {
@Override
public void run() {
launch(arguments);
}
});
/*
SwingUtilities.invokeLater(new Runnable() {
public void run() {
launch(Window.class, arguments);
}
}); */
//launch(args);
}
答案 0 :(得分:1)
SwingUtilities.involkeLater通常已过时,因为JavaFX打算取代Swing。 Platform.runLater不需要,因为可以自动调用启动。
可以按如下方式获取参数:
@Override
public void init() {
Parameters params = getParameters();
Map<String, String> named = params.getNamed();
System.out.println(named);
}
如果您有key = value参数以外的其他参数,请检查Parameters中的hte替代品。