我在Java項目中使用了SWT Eclipse瀏覽器。使用偵聽SWT運行映射的java方法瀏覽器更改
我創建瞭如下測試頁:
onchange="setTime();fieldChanged();"
這意味着Javascript方法調用。 setTime()
在頁面上,fieldChanged()
映射到Java代碼中。
映射javascript函數 - fieldChanged()
在Java中,如下:
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系統返回SWTException: Invalid thread access
在線new BrowserFunction(...)
。
我應該在哪個線程上運行Java映射函數以避免Windows系統中的異常?
編輯
由於@格雷格-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(..)
線
你需要更新這個問題來說明你的大部分代碼是Swing而不是SWT。 –
但問題在於如何在JavaScript中註冊名爲'fieldChanged()'的'BrowserFunction()'並收聽。問題在於線程。 – ACz
不,問題在於你正在混合Swing和SWT,這使線程問題變得更糟。適用於純SWT代碼的答案不適用於Swing + SWT。 –