日期:2014-05-20 浏览次数:20770 次
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(); } } }