2013-05-16 106 views
0

我想扔每當用戶關閉窗口的例外,但我不知道這是否可能拋出異常。下面是我想什麼做一些代碼:當一個JFrame被關閉

import java.awt.event.*; 
import javax.swing.*; 


public class ExceptionTest extends JFrame{ 

    public static void main(String[] args) { 
     try { 
      new ExceptionTest(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public ExceptionTest() throws Exception{ 
     super("Exception Test"); 
     setDefaultCloseOperation(DISPOSE_ON_CLOSE); 

     addWindowListener(new WindowAdapter() { 
      @Override 
      public void windowClosed(WindowEvent e) { 
       super.windowClosed(e); 
       //Throw Exception 
      } 
     }); 

     pack(); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 

} 
+0

爲什麼?你有沒有嘗試拋出異常? – Reimeus

+0

在'super.windowClosed(e)'調用後通常拋出異常。 –

+2

你一定可以拋出異常。真正的問題是你想要抓住那個異常? – gkalpak

回答

2

您可以使用RunTimeException代替如下:

public ExceptionTest() { 
    super("Exception Test"); 
    setDefaultCloseOperation(DISPOSE_ON_CLOSE); 

    addWindowListener(new WindowAdapter() { 
     @Override 
     public void windowClosed(WindowEvent e)throws RuntimeException { 
      throw new RuntimeException("WindowClosedException"); 
     } 
    }); 
+0

我現在怎麼接受這個?即使我從我的catch塊中刪除e.printStackTrace(),也只是打印堆棧跟蹤。 –

+0

您的窗口關閉後,您的JVm退出了。您將通過捕獲該異常來做什麼? –

+0

在我實際的程序中,我將實現它,我將打開幾個窗口,所以我想能夠捕捉它,以便我知道窗口已關閉。 –

1

你可以拋出一個RuntimeException

addWindowListener(new WindowAdapter() { 
      @Override 
      public void windowClosed(WindowEvent e) { 
       super.windowClosed(e); 
       throw new RuntimeException(); 
      } 
     }); 
2

基本上你可以丟那裏有任何種類的RuntimeExceptions。 你可以在這裏找到RuntimeExceptions名單:RuntimeException (Java Platform SE 6)

import java.awt.event.*; 
import javax.swing.*; 


public class ExceptionTest extends JFrame{ 

    public static void main(String[] args) { 
     try { 
      new ExceptionTest(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public ExceptionTest() throws Exception{ 
    super("Exception Test"); 
    setDefaultCloseOperation(DISPOSE_ON_CLOSE); 

    addWindowListener(new WindowAdapter() { 
     @Override 
     public void windowClosed(WindowEvent e) { 
      super.windowClosed(e); 
      throw new IllegalArgumentException("User closed this window!"); 
     } 
    }); 

    pack(); 
    setLocationRelativeTo(null); 
    setVisible(true); 
} 

}