您好我有以下代码:
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
可以保存正确的字符串并正确保存吗?
谢谢
答案 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,让执行者在完成执行时调用notify
或notifyAll
。
根据Marko Topolnik的建议,一个非常简单的例子:
//declaration
final CountDownLatch latch = new CountDownLatch(1);
...
//in the executor thread
latch.countDown();
//in the waiting thread
exec.start();
latch.await();