| [news.eclipse.platform.swt] Re: javaw.exe keeps running in Windows |
Bill Ewing wrote:
Steve Northover wrote:
The java VM will not keep running if you fail to dispose an SWT resource. Are you exiting from your event loop?
"Bill Ewing" <ewing@xxxxxxxxx> wrote in message news:csrshl$asq$1@xxxxxxxxxxxxxxxxxxIn Task Manager, you see an instance of javaw.exe (Windows' jvm launcher) appear when you start eclipse. We see another instance appear when we run our JFace app (either under eclipse or standalone).
After exiting our app, its javaw.exe does not disappear from Task Manager. They pile up, one for each run. Eventually, system problems begin to occur. Plus, when you try to shut down windows, you get all of these instances not responding to windows.
It sure sounds like a memory leak, or a failure to dispose a system resource, such as a non standard color.
But, we've scoured our app and commented out all such Color creations. We don't do anything with fonts, so we're out of ideas as to what would cause this problem. We have verified that this problem does not occur with simplistic apps.
Anyone have any ideas on...? 1. What our problem is 2. Strategies for troubleshooting
Thank you for taking the time to post, Steve. The information in your response is valuable to us.
We are using JFace. Specifically, we have an ApplicationWindow class that contains a main method. So, I believe handling the event loop is automatically done by ApplicationWindow-- it's buried and not available for us to see (until we figure out how to attach source and JavaDoc to libs we use).
What would you suggest we look at next?
I was in the process of commenting out chunks of the program, piece by piece until the zombie javaw.exe no longer hangs around in Task Manager.
But now, the knowledge that failure to dispose() would not cause this problem makes us wonder just what sort of problem we are chasing.
Our main method looks like the following. It was auto-generated by the GUI builder available from swt-designer.com.
public static void main(String args[]) {
try {
MainWindow window = new MainWindow();
window.setBlockOnOpen(true);
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
try {
MainWindow window = new MainWindow();
window.setBlockOnOpen(true);
Display.getCurrent().dispose();
} catch (Exception e) {
e.printStackTrace();
}
}