Gui freezes only when using multiple frames and 'while' socket is listening
Karel Tevarnier
Greenhorn
Joined: Apr 21, 2006
Posts: 2
posted
0
Hi,
I've been searching for hours to solve this problem. Tested a lot of things but haven't figured it out. I hope someone here can help me.
I'm writing a Server-Client Chat application. User must be able to select what to run: Client, Server, or both. So I made a 'Launcher' Class with a JFrame.
Then I have 2 classes Clientwindow and Serverwindow wich extend an abstract class chatwindow. With that abstract class extending a JFrame.
In the Serverwindow Class there's a listening while loop:
So far so good, but now I have a weird combination of facts...
- If I only start the Serverwindow without the Launcher: No problem - If I try to start Serverwindow and Clientwindow at the same time: Only Serverwindow appears - If I start Serverwindow with the Launcher (JFrame): Both frames freeze and program hangs - If I start Serverwindow without the while loop: No problem
thanks for the help
Roseanne Zhang
Ranch Hand
Joined: Nov 14, 2000
Posts: 1953
posted
0
It is very hard to know your problems without the actual code or the runnable program...
Ernest Friedman-Hill
author and iconoclast
Marshal
Roseanne is right, of course, but I can make a good guess: you put the "accept()" loop above right into an event handler of your GUI. Note that all events get handled on the same thread; by putting an infinite loop in an event handler, you prevent the GUI from ever receiving another event, and so the program appears to "freeze".
There's no way around it: you must create a dedicated thread for the server loop to run in. You probably have to do the same thing for the client, if the client sits in a loop reading and writing. Since you're apparently already creating threads to handle the server connections, this shouldn't be a problem for you.
It's a project for school. Other people made it by starting te whole program 2 times, first selecting server and connect, second selecting client and connect.
If I should do it like them now, I'll have to rewrite the whole thing.