Как лучше всего осуществляется обмен сообщениями между классами Java? - PullRequest
2 голосов
/ 21 сентября 2010

У меня есть несколько классов и потоков, которые необходимо записать в Java Swing JScrollPane.В среде Android / Eclipse я использовал android.os.Message.Есть ли что-то подобное в среде NetBeans / Windows?Вот куда я хотел бы отправить сообщение:

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");
        ...

Вот пример записи в JScrollPane из JFrame, в котором он находится:

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

Ответы [ 2 ]

2 голосов
/ 22 сентября 2010

Я буду вторым aperkins ' предложением использовать SwingWorker в качестве более надежного решения общего назначения.append(): «Этот метод является потокобезопасным, хотя большинство методов Swing - нет».Вот простой пример использования метода из другого потока.

2 голосов
/ 21 сентября 2010

Если вы пишете в саму панель (т.е. изменяете данные в представлении), тогда лучший способ - использовать рабочий поток Swing и выполнить его позже:

SwingUtilities.executeLater(myThread);

(Синтаксис может быть немного отключен - я делаю это из памяти)

...