Originariamente inviato da claujava
se provi a mettere due classi separate(una per Example,l'altra per Appender) purtroppo continua a non funzionare
No, invece funziona. Non so cosa tu abbia scritto, ma prova a fare in questo modo:
Example.java
codice:
import javax.swing.*;
import java.awt.Dimension;
public class Example extends JFrame{
private JTextArea textArea;
/**
* Creates a new instance of <code>Example</code>.
*/
public Example() {
super("Example");
this.textArea = new JTextArea();
JScrollPane jsp = new JScrollPane( this.textArea );
jsp.setPreferredSize( new Dimension(200, 200) );
this.add( jsp );
this.setDefaultCloseOperation( EXIT_ON_CLOSE );
this.setSize(200, 200);
this.pack();
this.setVisible(true);
}
public void append(String text){
this.textArea.append( text );
}
}
Appender.java
codice:
public class Appender extends Thread{
private Example e;
/**
* Creates a new instance of <code>Appender</code>.
*/
public Appender(Example e) {
this.e = e;
}
@Override
public void run(){
for(int i = 0; i < 10; i++){
try {
Thread.sleep(1500);
} catch ( InterruptedException exc ){
exc.printStackTrace();
}
e.append("Append " + i + "\n");
}
}
}
Main.java
codice:
import javax.swing.*;
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
SwingUtilities.invokeLater(
new Runnable(){
@Override
public void run(){
Example e = new Example();
new Appender(e).start();
}
}
);
}
}
Le classi devono essere collocate nello stesso package.