2013-05-04 43 views
10
void terminate() {} 
protected JFrame frame = new JFrame(); 

我怎樣才能得到frame運行,當我按下關閉按鈕終止功能?上的JFrame接近運行功能

編輯:我試圖運行這個,但由於某種原因它不打印測試(但是,程序關閉)。有沒有人有一個想法可能是什麼問題?

frame.addWindowListener(new WindowAdapter() { 
    public void WindowClosing(WindowEvent e) { 
     System.out.println("test"); 
     frame.dispose(); 
    } 
}); 

回答

13

您可以使用addWindowListener

frame.addWindowListener(new WindowAdapter() 
{ 
    public void windowClosing(WindowEvent e) 
    { 
     ... //call terminate 
     ... 
    } 
}); 

void windowClosing(WindowEvent e)Class WindowAdapter了。

+0

我需要創建一個擴展JFrame並實現WindowAdapter的新類嗎? (或可以保持框架作爲JFrame嗎?) 它並沒有真正的工作,我得到的警告「方法WindowClosed(WindowEvent)從類型new WindowAdapter(){}永遠不會在本地使用」on WindowClosing功能 – Mattias 2013-05-04 08:44:19

+0

在您所做的更改後發佈您的代碼。 – Maroun 2013-05-04 09:15:01

+0

好吧,我添加了代碼作爲編輯。 – Mattias 2013-05-04 09:22:45

1

如果要在JFrame關閉後終止程序,則必須在JFrame上設置默認關閉操作。

在你對你的JFrame寫的構造函數:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

如果你只是想調用一個方法時關上窗戶,而不是終止整個程序,不是去與Maroun的答案。

+0

我想做兩個(運行一個函數,然後終止)。這裏是我當前的代碼: \t \t frame.addWindowListener(新WindowAdapter的(){ \t \t \t公共無效的windowClosing(WindowEvent五){ \t \t \t \t的System.out.println( 「測試」); \t \t \t \t frame.dispose(); \t \t \t} \t \t}); 問題是它不打印「測試」。你有什麼想法可能是什麼問題? – Mattias 2013-05-04 09:13:07

+1

該方法是「windowClosing」而不是「WindowClosing」。你需要重寫它,所以它必須是確切的名稱。 – 2013-05-04 09:40:29

13

您不僅需要添加窗口偵聽器,還必須設置默認關閉操作,以便在關閉時不進行任何操作。這允許您的代碼執行。

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
    frame.addWindowListener(new WindowAdapter() { 
     @Override 
     public void windowClosing(WindowEvent event) { 
      exitProcedure(); 
     } 
    }); 

最後,您必須調用System exit來實際停止您的程序運行。

public void exitProcedure() { 
    frame.dispose(); 
    System.exit(0); 
} 
+1

+1,但特別是'@ Override'。非常好的建議。不(重新考慮)***優秀的建議***。 :) – 2013-05-04 10:22:09

+1

+1。確實。我與@AndrewThompson :) – Maroun 2013-05-04 10:25:24

0

Frame.dispose()方法不終止程序。要終止程序,你需要調用System.exit(0)方法