wood burning stoves 2.0*
The moose likes Swing / AWT / SWT and the fly likes Gui freezes only when using multiple frames and 'while' socket is listening Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Swing / AWT / SWT
Bookmark "Gui freezes only when using multiple frames and Watch "Gui freezes only when using multiple frames and New topic
Author

Gui freezes only when using multiple frames and 'while' socket is listening

Karel Tevarnier
Greenhorn

Joined: Apr 21, 2006
Posts: 2
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:

while(listening){
Serverthread(serversocket.accept(),this).start();
}

wich starts a new thread for the client.


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
It is very hard to know your problems without the actual code or the runnable program...
Ernest Friedman-Hill
author and iconoclast
Marshal

Joined: Jul 08, 2003
Posts: 24183
    
  34

Hi Karel,

Welcome to JavaRanch!

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.


[Jess in Action][AskingGoodQuestions]
Karel Tevarnier
Greenhorn

Joined: Apr 21, 2006
Posts: 2
thanks for the quick reply's

I was already thinking to put the server in another thread on its own.

Here's the full program (some names are in dutch):

http://users.pandora.be/karel.tavernier/extra/chatprog/chatprog.zip

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.
 
It is sorta covered in the JavaRanch Style Guide.
 
subject: Gui freezes only when using multiple frames and 'while' socket is listening
 
Similar Threads
Server Socket for chat
from ServerWindow to MainWindow
Client/Server GUI hanging up - Brocard's Problem - Running multiple client threads
Questions about MVC
My ui config dialog strategy + open ui questions