我使用以下方法使用BrowserController
课程
import org.eclipse.swt.browser.Browser;
...
private final Browser browser;
...
public boolean executeScript(final String script) {
if (!browser.isDisposed()) {
log.info("executeScript: {}", script); //$NON-NLS-1$
boolean result = browser.execute(script);
return result;
}
return false;
}
当我在我的应用程序中按下按钮时,会调用此方法。问题是,当我多次按下按钮并快速时,会抛出此错误
java.lang.IllegalStateException: Another script is already pending
at org.eclipse.swt.browser.Browser.execute(Browser.java:260)
at BrowserController.executeScript(BrowserController.java:58)
我尝试同步整个方法,同时对锁定对象进行同步,我也试过ReentrantLock但没有任何效果。知道谁可以同步这个?我不想捕获异常并取消执行,我需要执行所有脚本。
失败的同步尝试:
第一个
private final Lock lock = new ReentrantLock();
public boolean executeScript(final String script) {
if (!browser.isDisposed()) {
lock.lock();
log.info("executeScript: {}", script); //$NON-NLS-1$
boolean result = browser.execute(script);
lock.unlock();
return result;
}
return false;
}
另一个
private final Object lock = new Object();
public boolean executeScript(final String script) {
synchronized (lock) {
if (!browser.isDisposed()) {
log.info("executeScript: {}", script); //$NON-NLS-1$
boolean result = browser.execute(script);
return result;
}
return false;
}
}