日期:2014-05-20 浏览次数:20957 次
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
/**
 * 这个又是典型的SWING线程模型的问题
 * 我不知道如何通过SwingUilities.invokerLater来解决
 * 这个就说明自己对此模型理解的还是不到位
 */
public class Test12 extends JFrame {
    final JTextArea jb;
    JScrollPane js = null;
    JButton jb2 = null;
    public static void main(String[] args) {
        new Test12();
    }
    public Test12() {
        this.setSize(500, 500);
        this.setVisible(true);
        this.setResizable(true);
        this.setLayout(null);
        jb = new JTextArea();
        jb.setLineWrap(true);
        js = new JScrollPane(jb);
        js.setBounds(10, 10, 100, 100);
        jb2 = new JButton("OK");
        jb2.setBounds(100, 100, 100, 100);
        jb2.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
                SwingUtilities.invokeLater(new Runnable(){
                    public void run(){
                        write();
                    }
                });
            }
        });
        this.add(jb2);
        this.add(js);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public void write() {
        String c = "你好啊,放飞梦想共勉:让我们以一种平常";
        int a = 0;
        int x = 0;
        int y = 1;
        for(int i=0;i<c.length();i++){
//            for (int j1=0; j1<300000000; j1++) {
//                a = a + 1;
//            }      这里用线程休眠就可以了,还节约CPU资源
            try{
                Thread.sleep(500*1);
            }catch(Exception e){
                e.printStackTrace();
            }
            if(i==0){
                final String t=c.substring(i, i+1);
//                jb.setText(t);
                SwingUtilities.invokeLater(new Runnable(){
                    public void run(){
                        try{
                            Thread.sleep(100*1);
                        }catch(Exception e){
                            e.printStackTrace();
                        }
                        jb.setText(t);
                    }
                });
            }else{
                final String s=c.substring(i, i+1);
//                jb.append(s);
//
                SwingUtilities.invokeLater(new Runnable(){
                    public void run(){
                        try{
                            Thread.sleep(100*1);
                        }catch(Exception e){
                            e.printStackTrace();
                        }
                        jb.append(s);
                    }
                });
            }
            x++;
            y++;
            this.repaint();
        }
    }
}