我在这里有点绝望.我有这个jFrame,我需要在按Escape后关闭.这可以通过使用keyTyped事件轻松完成.在keyTyped事件中,我尝试使用关闭窗口的System.exit,但是进程仍然在任务管理器中运行(并且在netbeans中,即使我从jar文件运行,它仍然在任务管理器中运行) .
我尝试过dispose,setVisible(false)以及其他东西,但似乎没什么用.
编辑:
码
public Sketch(int width, int height)
{
sketch = new JFrame();
area = new JLabel();
sketch.setUndecorated(true);
sketch.setMinimumSize(new Dimension(width, height));
sketch.setSize(width, height);
area.setBounds(0, 0, width, height);
sketch.getContentPane().setLayout(null);
sketch.getContentPane().add(area);
sketch.pack();
sketch.setLocationRelativeTo(null);
sketch.setVisible(true);
sketch.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
imageBGR = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
imageGRAY = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
keyEvents();
setup();
Thread t = new Thread()
{
@Override
public void run()
{
running=true;
while(running)
draw();
}
};
t.start();
}
private void keyEvents()
{
sketch.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e)
{
if(e.getKeyChar()==KeyEvent.VK_ESCAPE)
{
running=false;
System.exit(0);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
注意:setup函数是一个空白函数,在扩展此类时我会覆盖它.
EDIT2:已解决
我发现了我做错了什么.看来我在课堂上扩展了这个,我正在使用网络摄像头.当我调用System.exit函数时,网络摄像头已关闭,所以我认为我不需要正确释放它,但事实上它是需要的.
关闭框架时的默认行为不是退出程序,而只是关闭窗口.要退出程序,您必须执行以下操作:
jframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Run Code Online (Sandbox Code Playgroud)
你也可以这样做:
jFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1427 次 |
| 最近记录: |