即使我的主类静态初始化程序中有错误,JavaFX应用程序仍会继续运行

时间:2015-04-01 14:18:07

标签: java javafx-8

继续跑步:

package app;

import javafx.application.Application;
import javafx.stage.Stage;

public class Test extends Application {

    static {
        throwAnException();
    }

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

    }

    public static void main(String[] args) {
        launch(args);
    }

    private static void throwAnException() {
        throw new RuntimeException();
    }

}

停止:

package app;

import javafx.application.Application;
import javafx.stage.Stage;

public class Test extends Application {

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

    }

    public static void main(String[] args) {
        throwAnException();
        launch(args);
    }

    private static void throwAnException() {
        throw new RuntimeException();
    }

}

为什么?

在第一种情况下,程序保持运行,即使有例外。 在第二种情况下,程序在调用javafx线程之前停止。 静态初始化程序应该在main方法之前运行,对吗? 我的英语不一样,所以我写的不多。 我希望你理解我的问题。

1 个答案:

答案 0 :(得分:0)

这是一个便宜的答案

它继续运行,因为有4(3)个其他线程正在运行..

当你通过stop()退出/关闭/关闭你的应用程序时,你会以正确的方式杀死你的应用程序,我认为main Thread是在stop()方法之后触发的,所以如果你有例外情况,它几乎发生在show之后,如果你在init()方法中抛出异常,应用程序关闭真实 - init()方法启动另外两个线程..

替换它并查看

static {
    new Thread(new Runnable() {

        @Override
        public void run() {
            while(true){
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("There are "+ Thread.activeCount()+" still running");
            }
        }
    }).start();
    throwAnException();
}