Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: Java Language
Expertise: Beginner
Feb 15, 2000

AWT Thread Interaction

Question:
I have two threads in an application. Thread A displays a form and allows the user to interact with it, thread B executes a loop which continually retrieves data and updates the form object by executing a synchronized method in the form object. I first tried to code thread A to use the showDialog() method on the form object, then started thread a and then thread b. However, thread a starts and the form then waits to be closed before the statement starting thread b is executed. I then tried just using the show() method in thread a - this allows the start of thread b to execute but I lose my interaction with the form.

Answer:
All AWT components need to be painted and have events delivered from the same thread. Therefore, you should not call showDialog() or the show method from different threads. This will produce unpredictable behavior such as what you have descrbied. To ensure your actions on AWT components occur synchronously within the main AWT thread, use the javax.swing.SwingUtilities invokeAndWait() or invokeLater() methods. Each one of these methods requires a Runnable argument that will be executed within the AWT thread. invokeLater() will return immediately, with the action being invoked when the AWT thread gets around to it. invokeAndWait() will block and only return after the AWT thread has executed the Runnable instance.

DevX Pro
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap