为什么这个Java程序在退出时关闭?

时间:2017-04-04 04:15:59

标签: java swing

我有一个在JFrame中运行的网络摄像头程序。每当我关闭框架时,它就像它应该的那样打印出“已关闭”,但是我的IDE说它仍在运行。为什么这样,我该如何解决?我没有在程序中的任何地方运行任何线程。这与默认的关闭操作没有任何关系,因为我已经测试了它。

public class Webcam extends JPanel {

private static BufferedImage image;

public Webcam() {
  super();
}

public static void main(String args[]) {
  System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

  JFrame frame = new JFrame("Webcam");
  Webcam panel = new Webcam();

  // Initialize JPanel parameters
  //frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  frame.setSize(1080, 720);
  frame.setContentPane(panel);
  frame.setVisible(true);
  frame.addWindowListener(new WindowAdapter()
  {
     @Override
     public void windowClosing(WindowEvent e)
     {
        System.out.println("Closed");
        e.getWindow().dispose();
        System.exit(0);
     }
  });
  Mat currentImage = new Mat();

  VideoCapture capture = new VideoCapture(0);
  if(capture.isOpened()) {
     // Infinitely update the images
     while(true) {
        // VideoCapture returns current Mat
        capture.read(currentImage);
        if(!currentImage.empty()) {
           frame.setSize(currentImage.width() + 40, currentImage.height() + 60);
           image = panel.matrixToBuffer(currentImage);
           // Update the panel
           panel.repaint();
        }
        else {
           System.out.println("Error: no frame captured");
           frame.dispose();
           System.exit(0);
           break;
        }
     }
  }
  return;

}

1 个答案:

答案 0 :(得分:0)

好的,虽然我很感谢所有有用的评论,但问题是VideoCapture有一个内部线程正在运行,并且向我的监听器添加capture.release()修复了它。