Ho riscontrato lo stesso problema con la mia applicazione. Ho avuto un pulsante "Esegui" la mia applicazione che ha eseguito alcune azioni e ha emesso i risultati su un JTextArea. Ho dovuto chiamare il metodo da una discussione. Ecco cosa ho fatto.
Ho diversi pulsanti di opzione che è possibile eseguire e quindi un pulsante "Esegui" per eseguire quell'azione particolare. Ho un'azione chiamata Convalida. Quindi quando controllo quel pulsante di opzione e clicco sul pulsante "Esegui", chiama il metodo validate(). Così ho messo questo metodo in una classe interna che ha implementato Runnable
class ValidateThread implements Runnable {
public void run() {
validate();
}
}
Poi ho chiamato questa discussione nel ActionListener del pulsante "Esegui", come in modo
runButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
// Some code checked on some radio buttons
if(radioButton.isSelected()) {
if(radioButton.getText().equals("VALIDATE")) {
Runnable runnable = new ValidateThread();
Thread thread = new Thread(runnable);
thread.start();
}
}
}
});
Voila! L'output è ora inviato a JTextArea.
Ora, noterete che JTextArea non scorrerà verso il basso con il testo. Quindi è necessario impostare la posizione del cursore come
textArea.setCaretPosition(textArea.getText().length() - 1);
Ora, quando i dati vengono aggiunti al JTextArea, sarà sempre scorrere verso il basso.
Perché non utilizzare EventQueue.invokeLater (eseguibile)? –
Non sono sicuro che fosse disponibile - il tuo commento è stato 4 anni dopo il mio lol – Ascalonian