I'm writing this Java program in which I have a JFrame and a Thread. Everything goes fine, except when I click the 'X' button to close the program, the program itself closes (frame and it's resources get destroyed), but the "javaw.exe" process won't end. I have to terminate that manually all the time.
I tried of course setDefaultCloseOperation(JFrame.*EXIT_ON_CLOSE*) , I even tried awt window listener with System.exit(0) in it, but still no success.
Any ideas to help?
This is the my code. [It needs JavaCV to be installed on your machine.]
class MyGrabber implements Runnable {
final int INTERVAL = 1000;// /you may use interval
IplImage image;
CanvasFrame frame = new CanvasFrame("Web Cam");
public MyGrabber() {
frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
}
@Override
public void run() {
FrameGrabber grabber = new OpenCVFrameGrabber(0); // 1 for next camera
int i = 0;
try {
grabber.start();
while (true) {
image = grabber.grab();
if (image != null) {
cvSaveImage("test.jpg", image);
// show image on window
frame.showImage(image);
}
Thread.sleep(INTERVAL);
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (com.googlecode.javacv.FrameGrabber.Exception e) {
e.printStackTrace();
}
}
}
public class TestGrabber {
public static void main(String[] args) {
MyGrabber gs = new MyGrabber();
Thread th = new Thread(gs);
th.start();
}
}
cd c:\<path>\java\bin
(replace <path>
with your Java installation)jstack <pid> | more
. Replace <pid>
with the process id from task manager.Look at the threads that are not flagged as "daemon". There will be at least one such thread which hangs and has the shutdown handler in the stack trace.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With