java - System.exit 后程序仍在运行

标签 java swing

我在这里有点绝望。我有这个 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);
        }
    }
    });
}

注意: setup 函数是一个空白函数,我在扩展此类时会覆盖它。

EDIT2:已解决

我发现我做错了什么。看来,在我扩展这门类(class)的类(class)中,我正在使用网络摄像头。当我调用 System.exit 函数时,网络摄像头的指示灯已关闭,所以我认为我不需要正确释放它,但实际上是需要的。

最佳答案

关闭框架时的默认行为不是退出程序,而只是关闭窗口。为了退出程序,您必须执行以下操作:

jframe.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

你也可以这样做:
jFrame.addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent e) {
             System.exit(0);
         }
     });

关于java - System.exit 后程序仍在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20125614/

相关文章:

java - JRE 如何拾取重复的类

java - 已更新 : Android: java. lang.RuntimeException:无法启动 Activity ComponentInfo

java - 从 Activiti 调用 Mule 非 Web 服务流程

java - 进度条属性变化事件不触发

java - 将颜色更改为 JPanel 并返回到原始状态

java - 在运行 swing gui 的同时运行线程

Java Swingworker 和多线程

java - Swing 2D 游戏性能低下

java - 如何在java中移动形状并计算拖动时的坐标?

java - JShell 不会使用 Git Bash 执行任何操作