点击按钮执行一个方法,在方法的执行中我多次向JTextArea写入数据,实时的显示程序运行到了哪个地方,但是要等到这个方法执行完,我才能看到JTextArea中的信息,执行过程JTextArea内容不变。但是我如果不通过点击事件来运行这个方法,
JTextArea的内容会实时的变换。比如在下面的程序中,我在main中直接运行这个方法就没有问题,这是为什么?public class ButtonFrame extends JFrame {
private JTextArea textArea ;
private JButton startButton;
private JScrollPane scrollPanel = new JScrollPane();

public ButtonFrame() {
textArea = new JTextArea();
startButton = new JButton();
}

public void defaultCfg() {
this.setTitle("test");
this.setLocation(400,300);
this.setSize(550, 500); 
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.setVisible(true);
}

public void bulidContent() {
textArea.setBounds(new Rectangle(10, 2, 271, 219));
scrollPanel.setMinimumSize(new Dimension(400, 400));
scrollPanel.setPreferredSize(new Dimension(475, 400));
scrollPanel.setBounds(new Rectangle(10, 10, 261, 240));
scrollPanel.getViewport().add(textArea, null);
textArea.setLineWrap(true);

//添加生成本地文件列表按钮
startButton.setText("生成本地文件列表");
startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
start();
}
});

JPanel panel = new JPanel();
panel.add(scrollPanel, null);
panel.add(startButton, null);
this.add(panel);
this.setVisible(true);
}

public void start() {
textArea.setText("哈哈哈哈哈......");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
textArea.setText("不见了");
}

public static void main(String[] args) {
ButtonFrame buttonFrame = new ButtonFrame();
buttonFrame.defaultCfg();
buttonFrame.bulidContent();
// buttonFrame.start();

}
}

解决方案 »

  1.   

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.event.*;public class ButtonFrame extends JFrame
    {
    private JTextArea textArea ;
    private JButton startButton;
    private JScrollPane scrollPanel = new JScrollPane();
    public ButtonFrame()
    {
    textArea = new JTextArea();
    startButton = new JButton();
    }
    public void defaultCfg()
    {
    this.setTitle("test");
    this.setLocation(400,300);
    this.setSize(550, 500);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setResizable(false);
    this.setVisible(true);
    }
    public void bulidContent()
    {
    textArea.setBounds(new Rectangle(10, 2, 271, 219));
    scrollPanel.setMinimumSize(new Dimension(400, 400));
    scrollPanel.setPreferredSize(new Dimension(475, 400));
    scrollPanel.setBounds(new Rectangle(10, 10, 261, 240));
    scrollPanel.getViewport().add(textArea, null);
    textArea.setLineWrap(true);
    //添加生成本地文件列表按钮
    startButton.setText("生成本地文件列表");
    startButton.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e)
    {
    Thread worker = new Thread(){
    public void run(){
    textArea.setText("哈哈哈哈哈......");
    try
    {
    Thread.sleep(5000);
    }
    catch (InterruptedException e)
    {
    // TODO Auto-generated catch block  e.printStackTrace();
    }
    textArea.setText("不见了");
    }
    };
    worker.start();
    }
    });
    JPanel panel = new JPanel();
    panel.add(scrollPanel, null);
    panel.add(startButton, null);
    this.add(panel);
    this.setVisible(true);
    }
    public void start()
    {
    textArea.setText("哈哈哈哈哈......");
    try
    {
    Thread.sleep(5000);
    }
    catch (InterruptedException e)
    {
    // TODO Auto-generated catch block  e.printStackTrace();
    }
    textArea.setText("不见了");
    }
    public static void main(String[] args)
    {
    ButtonFrame buttonFrame = new ButtonFrame();
    buttonFrame.defaultCfg();
    buttonFrame.bulidContent();
    // buttonFrame.start();
    }
    }
      

  2.   

    你线程写的不正确没有new出来一个Thread类的对象启动线程呢,1楼提供的代码可以运行,请楼主说明白想要实现的功能。
      

  3.   

    你start一个线程,这个线程就脱离你的主线程自己执行去了(也就是你说的不断像文本域中写字符串),你的主线程继续执行。