同步js脚本执行Java

时间:2017-02-20 10:16:43

标签: java browser synchronization locks

我使用以下方法使用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;
    }
}

0 个答案:

没有答案