代码之家  ›  专栏  ›  技术社区  ›  jacknad

如何最好地完成Java类之间的消息传递?

  •  2
  • jacknad  · 技术社区  · 16 年前

    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 回复  |  直到 16 年前
        1
  •  2
  •   aperkins    16 年前

    如果要写入窗格本身(即更改视图上的数据),那么最好的方法是使用swing worker线程,稍后再执行:

    SwingUtilities.executeLater(myThread);
    

    (语法可能有点错误-我是从记忆中做的)

        2
  •  2
  •   Community Mohan Dere    9 年前

    我先说 aperkins' 使用建议 SwingWorker 作为更强大的通用解决方案。

    在特殊情况下 append() :“这个方法是线程安全的,尽管大多数Swing方法不是这样的。” example 使用另一个线程的方法。