我有一个推理过程,这个过程中间会有结果要输出。因为推理过程很快,所以结果输出也很快。
现在的问题是我想放慢一点,让用户能够很清楚地看到推理过程。如果用控制台程序的话,比较好办
void reasoning()
{
  推理步骤1;
  输出结果1;
  sleep(1000);//休息一秒钟
  推理步骤2;
  输出结果2;
  sleep(1000);
}
用上面的程序后,控制台就会每隔一秒钟打印一行数据出来。现在我是要在图形界面上显示,也是reasoning,然后中间用sleep(1000),结果显示在某个textarea里面,或者用改变button的颜色来显示。这个时候,就无法出现慢动作的效果。开始没有显示,最后一下子把所有的结果同时显示出来。
我考虑过用timer,但是我的推理过程是一个递归的推理过程,很难嵌到timer事件里面去。
请问,如何能够实现这样的慢动作效果?我在VC里面也用试过,希望能够在一个textarea里面每隔一秒钟输出一个结果,也是希望用sleep 实现,但是也没有成功。麻烦大虾们给个解决方案。

解决方案 »

  1.   

    设置定时执行,
    setTimeout(fun1,1000)fun1(){
    //handle result
    }
      

  2.   

    import java.awt.BorderLayout;import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;public class T {
    public static void main(String[] args) {
    JTextArea textArea = new JTextArea();
    JScrollPane sp = new JScrollPane(textArea); JFrame f = new JFrame();
    f.getContentPane().add(sp, BorderLayout.CENTER);
    f.setSize(300, 300);
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);

    new PrimeNumerThread(textArea).start();
    }
    }class PrimeNumerThread extends Thread { private JTextArea textArea; public PrimeNumerThread(JTextArea textArea) {
    this.textArea = textArea;
    }

    public void run() {
    for (int i = 3; i < 1000; i += 2) {
    boolean f = true;
    for (int k = 2; k < i / 2; k++) {
    if (i % k == 0) {
    f = false;
    break;
    }
    }
    if (f) {
    textArea.append(i + "\n");
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    }
    }
    }
    }
    }