2015-04-01 30 views
2

有一个错误继续运行:JavaFX应用程序保持运行,即使我在主类静态初始化

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线程之前停止。 静态初始化器应该在主要方法之前运行,对吧? 我的英语差异很大,所以我没写太多。 我希望你能理解我的问题。

回答

0

这是一种廉价的答案

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

当你退出/关闭/关机通过stop()您的应用程序,你杀了它的权利方式,也是我认为main Thread是在stop()方法之后触发的,所以如果你有一个例外,那么在演出结束后会发生很多事情,如果你在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(); 
} 
相关问题