我正在使用SWT开发一个java应用程序。我已经使用JNativeHook Library实现了HotKeyFunction。它全局监听热键,即当应用程序也不在焦点时。我必须在按下热键时使应用程序处于焦点。所以我试图使用shell.setFocus(),shell.forceFocus()。但我得到一个“无效的线程访问”异常。看看文档,它显示
抛出:
SWTException - ERROR_WIDGET_DISPOSED - 如果接收器已被丢弃 ERROR_THREAD_INVALID_ACCESS - 如果没有从创建接收器的线程调用
对于这两个函数。我知道JNativeHook使用另一个线程来监听密钥,我试图从该线程调用这些方法但是shell已经使用主线程创建了。现在我如何调用这些方法主线程。我对线程知识非常少。
PS:我没有在任何地方明确创建任何线程。
答案 0 :(得分:2)
您需要使用Display.asyncExec
或Display.syncExec
方法。您可以使用Display.getDefault
获取Display实例,或者从UI对象获取它并将其传递给您的主题。
// do something on the UI thread asynchronously
Display.getDefault().asyncExec(new Runnable() {
public void run() {
// access to UI
}
});
// do something on the UI thread synchronously
Display.getDefault().syncExec(new Runnable() {
public void run() {
// access to UI
}
});