Newbie swing question

K

Kd

Hello,

I am new to java and I started off by writing a client/server based
tic-tac-toe game using Swing. I have run myself into the following
situation.

What I am trying to do:
My server wants print a dot (.) every few seconds on its GUI text area
when it is waiting for input from the client.

How I did it:
I have timeout set on the socket from where server is reading for the
client input. Upon timeout there is an exception and my catch block
will print(try to) a dot on the server GUI text area. And then it will
again go back to reading(waiting for) the client input.

Problem:
However out of my design flaw or whatever, this whole thing about
waiting for Client input and printing the GUI, is happening in the same
GUI thread.

So the User Inputs -> Server GUIThread ->Waits for Client->Timesout and
prints to the GUI->Wait for Client->Gets Client response->Prints some
other info to the GUI

Due to this the dot(.) that i m trying to print at time out is not
flushing on the GUI screen until the server gets the response from the
client.

Is there a way to go around this ? If no what would be a better design
for Client/Server GUI apps WRT java swing.

Thanks,
Kandarp
 
Z

zero

Hello,

I am new to java and I started off by writing a client/server based
tic-tac-toe game using Swing. I have run myself into the following
situation.

What I am trying to do:
My server wants print a dot (.) every few seconds on its GUI text area
when it is waiting for input from the client.

How I did it:
I have timeout set on the socket from where server is reading for the
client input. Upon timeout there is an exception and my catch block
will print(try to) a dot on the server GUI text area. And then it will
again go back to reading(waiting for) the client input.

Bad idea. Don't use exceptions to influence program flow. Exceptions
are supposed to be exceptional, not the rule.
Problem:
However out of my design flaw or whatever, this whole thing about
waiting for Client input and printing the GUI, is happening in the same
GUI thread.

So the User Inputs -> Server GUIThread ->Waits for Client->Timesout and
prints to the GUI->Wait for Client->Gets Client response->Prints some
other info to the GUI

Have you looked into SwingUtilities.invokeLater?
Due to this the dot(.) that i m trying to print at time out is not
flushing on the GUI screen until the server gets the response from the
client.

Is there a way to go around this ? If no what would be a better design
for Client/Server GUI apps WRT java swing.

Thanks,
Kandarp

a possible algorithm:

1a. server makes a move
1b. server starts DotThread

2a. server receives move from client
2b. server stops DotThread

DotThread would use Thread.sleep() to wait a number of seconds, and then
call

SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
textOutput.append(".");
}
});

An alternative is to use a java.util.Timer which wakes up DotThread
(which would then extend TimerTask) at certain intervals. In this
implementation DotThread would not use Thread.sleep of course.
 
K

Kd

I see. This makes sense. I am familiar with invokeLater. Because when I
googled around invokeLater is what I was getting as a solution. I tired
using it but it didnot work.

The problem is that I was trying to take the user input (server move)
and then process the whole thing serially. I guess should take the
(userinput) move made on the server side in one thread. Then other
threads should handle the processing (which involves the DotThread and
the Client thread). That way the event handling thread of Swing is not
blocked waiting for response from the client. Which is what was
happening with my design

Thanks for you reply
Kandarp
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,584
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top