JavaFX使用Platform.runLater和SwingUtilities.involkeLater

时间:2014-11-14 14:38:10

标签: java

是否有人能够举例说明使用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);
}

1 个答案:

答案 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替代品。