在Java中实现延迟

时间:2012-04-26 08:14:45

标签: java

您好我有以下代码:

okBtn.addEventListener(Events.ON_CLICK, new EventListener()
{
            @Override
            public void onEvent(final Event arg0) throws Exception
            {
                //when the user clicks on ok, we take the current 
                //string from fckeditor...
                String currentValue = fckEditor.getValue();
                // set the string to preview to the current value 
                html.setContent(currentValue);

            }
 });

我遇到的问题是这个fckEditor.getValue()(fckEditor类似于textArea)调用有一个延迟,因为ok动作比fckEditor.getValue()检索数据和因此,有时当我在fckEditor中快速修改文本并点击okBtn时,更改不会反映出来。

我提出了这个解决方案,

    okBtn.addEventListener(Events.ON_CLICK, new EventListener()
    {
        @Override
        public void onEvent(final Event arg0) throws Exception
        {

            String currentValue;

            synchronized (fckEditor)
            {
                currentValue = fckEditor.getValue();
                fckEditor.wait(100);
            }

            html.setContent(currentValue);

        }

    });

但是,我并不完全相信这将是最好的解决方案,因为我很难对延迟.wait(100);进行编码,并且可能在不同的计算机上延迟可能会有所不同。因此,最终其他环境可能需要或多或少的延迟。

如何让执行等到fckEditor.getValue();调用完全结束?所以currentValue可以保存正确的字符串并正确保存吗?

谢谢

2 个答案:

答案 0 :(得分:0)

Timer timer = new Timer() {
 public void actionerformed() {
   setRepeats( false );
   String currentValue = fckEditor.getValue();
   try {
      Thread.sleep( 100 );
   } catch( Exception ex ) {
      ex.printStackTrace();
   }//catch
   html.setContent(currentValue);
 }//met
}//inner class
timer.start();

答案 1 :(得分:0)

你应该在没有参数的情况下使用wait,让执行者在完成执行时调用notifynotifyAll


根据Marko Topolnik的建议,一个非常简单的例子:

//declaration
final CountDownLatch latch = new CountDownLatch(1);
...
//in the executor thread
latch.countDown();
//in the waiting thread
exec.start();
latch.await();