1

嗨,我有以下代码:

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可以保持正确的字符串并正确保存吗?

谢谢

4

2 回答 2

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();
于 2012-04-26T08:20:45.130 回答
0

您应该使用不带参数的等待并让执行程序调用notifynotifyAll在它完成执行时调用。


按照 Marko Topolnik 的建议,一个非常简单的例子:

//declaration
final CountDownLatch latch = new CountDownLatch(1);
...
//in the executor thread
latch.countDown();
//in the waiting thread
exec.start();
latch.await();
于 2012-04-26T08:44:42.333 回答