Sono tornato alla jTextArea e ho risolto così:
codice:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
public class Prova extends JFrame {
public class Lavoratore extends Thread {
/*creare il nuovo thread estendendo Thread e non implementando
Runnable, così posso chiamare il metodo start
perche il run non va bene*/
DefaultListModel ml;
public Lavoratore(DefaultListModel ml) {
this.ml = ml;
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
ml.addElement("ciao");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String o[]) {
Prova x = new Prova();
x.setVisible(true);
}
JPanel principale;
BorderLayout gestorePrincipale;
DefaultListModel modelloLista = new DefaultListModel();
JList lista = new JList(modelloLista);
JButton esegui = new JButton("esegui");
public Prova() {
principale = new JPanel();
gestorePrincipale = new BorderLayout();
principale.setLayout(gestorePrincipale);
this.getContentPane().add(principale);
principale.add(lista, BorderLayout.CENTER);
principale.add(esegui, BorderLayout.SOUTH);
this.setSize(300, 500);
this.validate();
esegui.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
premuto();
}
});
}
@Override
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}
public void premuto() {
Lavoratore l = new Lavoratore(modelloLista);
l.start();
}
}
Grazie a tutti quelli che hanno risposto