2010-09-21 33 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

相关问题