2015-05-07 2 views
1

Мне не очень нравится опция JFrame.EXIT_ON_CLOSE. Если есть нить, пишущая файл, или загрузка чего-либо, этот вариант будет убит до его завершения. Вместо этого я пытался завершать программу, уничтожив окно GUI:Как избежать JFrame.EXIT_ON_CLOSE и изящно завершить программу качания

/** 
    * Terminates the whole program while saving settings. 
    */ 
    public void Terminate() { 
    //gui is JFrame representing the application window 
    gui.setVisible(false); 
    gui.dispose(); 
    gui.destroyTray(); 
    //Stop tool thread if running 
    if(ToolRunning()) 
     StopTool(); 
    //Save settings 
    if(settings==null) { 
     System.out.println("Settings is null!"); 
     return; 
    } 
    try { 
     settings.loadSettingsFromBoundFields(); 
     settings.saveToFile(SETTINGS_FILE, false); 
    } 
    catch(IOException e) { 
     System.err.println("Problem saving settings:"); 
     e.printStackTrace(System.err); 
    } 
    //Here, no non-deamon threads should be running (daemon thread does not prolong the applicatione execution). 
    } 

Но программа продолжает работать и распашные потоки не выйти, когда я dispose() в JFrame. Что еще может блокировать Свинг? Когда я сделал более простую программу, используя тот же подход (скрыть окно и dispose()), он сработал. Это означает, что сложность моего проекта скрывает то, что просочилось. Как я могу найти то, что блокирует потоки Swing от завершения?

+0

SetVisible (ложь) == Dispose(), если JVM еще жив – mKorbel

+0

попробовать WindowListener/Государство/e.i. – mKorbel

+0

1. (Нет ... мета много раз.) Мы не являемся справочным столом, 2. (чтобы избежать неправильных ответов здесь) есть два типа процессов, которые вам нужно будет завершить/закрыть() deamon и non_deamon темы, 3. Как я могу найти, что блокирует потоки Swing от завершения? - JProfiler показывает вам все беспорядок, который не завершается/закрывается() во время выполнения, вкл. class/void/variable name/inheritance или их вложенный объект API – mKorbel

ответ

Смежные вопросы