2013-05-16 72 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); 
} 

}