Hello all!
I have an application running where the user can set some look and
feels. On a few, when doing a click on a certain menu item the whole
app freezes completely.
The command behind that menu is executed fully (I debugged it), but
after it returns back into the calling code from the event dispatcher,
the window *freezes completely*. It must have something to do with the
look and feels, some simpler ones don't show the described behavior.
When issuing that command, I can only hear my hard disk doing
something shortly, then everything is frozen. I can't even close the
frame anymore. Repainting is gone.
Does anyone know how to debug something like that?
Karsten
PS: The action performed is simply sending a maybe 15 or 20 byte
string over a socket... there are no exceptions that occurr, no
unexecuted code...
Leonard Milcin - 29 Apr 2008 20:42 GMT
> Hello all!
>
[quoted text clipped - 12 lines]
>
> Does anyone know how to debug something like that?
There are too many reasons for the application to hang to list them.
You can try using debugger or SIGQUIT to get thread dumps to get some
idea on what's hung and where it's spending time.
You can try to isolate the problem by removing more and more code. It
may make it simpler to find the cause of the problem.
Best regards,
Leonard Milcin

Signature
Simplicity is the ultimate sophistication.
-- Leonardo da Vinci
Chase Preuninger - 30 Apr 2008 02:18 GMT
Well code that put for example in the actionPerformed method of
ActionListener will not be executed in a separate thread from the GUI,
so if you have a huge process going in that method it will
block(disable) your GUI until that method returns. Try using a
separate thread.
Philipp - 30 Apr 2008 05:59 GMT
> Hello all!
>
[quoted text clipped - 18 lines]
> string over a socket... there are no exceptions that occurr, no
> unexecuted code...
You do know that all interactions with the GUI should be done in the
Event Dispatching Thread?
In your case, it seems that this is guaranteed by the fact that the
whole process is started by "doing a click on a certain menu item". So
your socket code executes (unless specifically otherwise programmed by
you) in this GUI painting thread. If this socket write hangs for any
reason, the GUI will be frozen.
A possible alternative and maybe better design is to use a second thread
to do the socket sending work. Use the javax.swing.SwingWorker<T,V>
which makes this transition painless.
Phil