2010-09-21 16 views
2

J'ai plusieurs classes et les fils qui doivent écrire un Java Swing JScrollPane. Dans l'environnement Android/Eclipse, j'ai utilisé android.os.Message. Y a-t-il quelque chose de similaire dans l'environnement NetBeans/Windows? Voici où je voudrais envoyer le message:Comment la messagerie entre les classes Java est-elle la mieux accomplie?

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

Voici un exemple d'écriture à la JScrollPane du JFrame il vit dans:

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

Répondre

2

Si vous écrivez dans le volet lui-même (par exemple la modification des données sur la vue), la meilleure façon est d'utiliser un thread de travail de swing, et l'exécuter plus tard:

SwingUtilities.executeLater(myThread); 

(syntaxe peut être légèrement - je fais de la mémoire)

+1

La méthode 'process()' de SwingWorker' s'exécute sur l'EDT, donc pas besoin d'utiliser 'invokeLater()': http://download.oracle.com/javase/6/docs/api/javax /swing/SwingWorker.html – trashgod

+0

le JScrollPane est mis à jour par une tâche de fond dans une autre classe, ou de la JFrame qu'il vit. l'écriture du JScrollPane semble ot répondre, mais la tâche de fond a beaucoup à faire, ce qui est pourquoi c'est nécessaire. – jacknad

+0

@trashgod vous avez raison - j'ai oublié à ce sujet. Je pensais à un fil normal. – aperkins

2

Je deuxième aperkins' suggestion d'utiliser SwingWorker comme plus robuste, solution à usage général.

Dans le cas particulier de append(): « Cette méthode est thread-safe, bien que la plupart des méthodes Swing ne sont pas. » Voici un example simple d'utiliser la méthode d'un autre thread.

+0

Je n'avais jamais lu cette partie - hein. J'ai toujours évité de faire des mises à jour de l'interface utilisateur, sauf sur le thread de répartition des événements par principe, et pour m'assurer que je n'ai jamais rencontré un problème. Bon à savoir à propos d'append. – aperkins