2010-09-21 35 views
2

我有多個類和線程需要寫入Java Swing JScrollPane。在Android/Eclipse環境中,我使用了android.os.Message。在NetBeans/Windows環境中是否有類似的東西?這裏就是我想從發送消息:Java類之間的消息傳遞如何最好地完成?

public class PrintStatusTask extends Thread { 
    PrintStatusTask(String name) { 
     this.name = name; 
    } 
    private void sendMessage(String s) { 
     // TODO: send message to jTextArea 
    } 
    public void run() { 
     ... 
     sendMessage("Any message"); 
     ... 

這是寫作的從JFrame中它生活在JScrollPane的一個例子:

public class Controller extends javax.swing.JFrame implements Observer { 
    ... 
    jTextArea.append(s);  
    ... 

回答

2

如果你正在寫的窗格本身(即改變在視圖中的數據),那麼最好的辦法是使用擺動工作線程,後來執行它:

SwingUtilities.executeLater(myThread); 

(語法可能會稍微偏離 - 我從內存中這樣做)

+1

SwingWorker的'process()'方法在EDT上運行,所以不需要使用'invokeLater()':http://download.oracle.com/javase/6/docs/api/javax /swing/SwingWorker.html – trashgod 2010-09-21 20:04:20

+0

JScrollPane由另一個類中的後臺任務或其所在的JFrame更新。寫入JScrollPane似乎沒有響應,但後臺任務有很多工作要做,這就是爲什麼這是必需的。 – jacknad 2010-09-21 20:21:15

+0

@trashgod你是對的 - 我忘記了。我正在考慮一個正常的線程。 – aperkins 2010-09-21 20:22:22

2

我會第二個aperkins'建議使用SwingWorker作爲更強大的通用解決方案。

append()的特定情況下:「此方法是線程安全的,儘管大多數Swing方法都不是。」以下是使用另一個線程的方法的簡單example

+0

我從來沒有讀過這部分 - 呵呵。作爲一個原則,除了事件派發線程之外,我一直避免使用UI更新,並且確保我從未遇到過問題。很高興知道追加。 – aperkins 2010-09-22 15:02:30

相關問題