运行 映射 java 方法并监听 SWT 浏览器变化
Running mapped java method with listen to SWT Browser changes
我在 Java 项目中使用了 SWT Eclipse 浏览器。
我创建的测试页面如下:
<!DOCTYPE html>
<html>
<body>
Start: <input type="text" id="startTimeField" onchange="setTime();fieldChanged();" placeholder="Type text and press Enter"> ms
<script>
function setTime() {
document.getElementById('startTimeField').value = new Date().getMilliseconds();
}
</script>
</body>
</html>
onchange="setTime();fieldChanged();"
表示 Java 脚本方法调用。 setTime()
在页面上,fieldChanged()
映射在 Java 代码中。
映射的 java 脚本函数 - java 中的 fieldChanged()
如下:
private void startListen() {
SWTRunner.runInSwtThread(() -> new BrowserFunction(getSwtBrowser().getBrowser(), "fieldChanged") {
@Override
public Object function(Object[] objects) {
swtResultField.setText("" + new Date().getTime() % 1000);
return null;
}
});
}
我在哪个线程上遇到问题 运行 java 代码中的映射函数?
我按照上面的代码尝试 - 运行 它在 SWTRunner.runInSwtThread()
和 OS X 系统上运行良好,但在 Windows 系统上 return SWTException: Invalid thread access
在线 new BrowserFunction(...)
.
我应该 运行 在哪个线程上映射 Java 中的函数以避免 Windows 系统中的异常?
编辑
正如@greg-449 所说,我编辑并调用了该方法,但在 Windows 系统上也出现错误,该方法如下所示:
private void startListen() {
new BrowserFunction(getSwtBrowser().getBrowser(), "fieldChanged") {
@Override
public Object function(Object[] objects) {
getSwtBrowser().getBrowser().getDisplay.asyncExec(() -> swtResultField.setText("" + new Date().getTime() % 1000));
return null;
}
};
}
SWTException 在 new BrowserFunction(..)
行
上抛出
已解决
问题出在线程依赖于操作系统。
在 Windows 上必须是 运行 在 Display.asyncExec()
上。
在 OS X 必须是 运行 在 SWTRunner.runInSwtThread()
。
我在 Java 项目中使用了 SWT Eclipse 浏览器。
我创建的测试页面如下:
<!DOCTYPE html>
<html>
<body>
Start: <input type="text" id="startTimeField" onchange="setTime();fieldChanged();" placeholder="Type text and press Enter"> ms
<script>
function setTime() {
document.getElementById('startTimeField').value = new Date().getMilliseconds();
}
</script>
</body>
</html>
onchange="setTime();fieldChanged();"
表示 Java 脚本方法调用。 setTime()
在页面上,fieldChanged()
映射在 Java 代码中。
映射的 java 脚本函数 - java 中的 fieldChanged()
如下:
private void startListen() {
SWTRunner.runInSwtThread(() -> new BrowserFunction(getSwtBrowser().getBrowser(), "fieldChanged") {
@Override
public Object function(Object[] objects) {
swtResultField.setText("" + new Date().getTime() % 1000);
return null;
}
});
}
我在哪个线程上遇到问题 运行 java 代码中的映射函数?
我按照上面的代码尝试 - 运行 它在 SWTRunner.runInSwtThread()
和 OS X 系统上运行良好,但在 Windows 系统上 return SWTException: Invalid thread access
在线 new BrowserFunction(...)
.
我应该 运行 在哪个线程上映射 Java 中的函数以避免 Windows 系统中的异常?
编辑
正如@greg-449 所说,我编辑并调用了该方法,但在 Windows 系统上也出现错误,该方法如下所示:
private void startListen() {
new BrowserFunction(getSwtBrowser().getBrowser(), "fieldChanged") {
@Override
public Object function(Object[] objects) {
getSwtBrowser().getBrowser().getDisplay.asyncExec(() -> swtResultField.setText("" + new Date().getTime() % 1000));
return null;
}
};
}
SWTException 在 new BrowserFunction(..)
行
已解决
问题出在线程依赖于操作系统。
在 Windows 上必须是 运行 在 Display.asyncExec()
上。
在 OS X 必须是 运行 在 SWTRunner.runInSwtThread()
。