gpt4 book ai didi

java - Display.getDefault().asyncExec 给出 InspirationTargetException

转载 作者:行者123 更新时间:2023-12-02 03:26:24 28 4
gpt4 key购买 nike

即使将所有 SWT 代码包装在“Display.getDefault().asyncExec”中,我也无法更新我的 UI。

假设我有一个监听器,称为单击一个按钮。

Listener enterlisner = new Listener() {
@Override
public void handleEvent(Event event)
{
Display.getDefault().asyncExec(new Runnable()
{
public void run()
{
try
{
if((event.keyCode == SWT.CR || event.keyCode == 13 || event.type == SWT.Selection) && btnAdd.isEnabled())
{
new ProgressMonitorDialog(shell).run(true, true, new IRunnableWithProgress()
{
@Override
public void run(final IProgressMonitor monitor) throws InvocationTargetException,
InterruptedException
{

// method1()

// method2() {method2.1() , method2.2()}

// method3() {method3.1() , method3.2()}

// ....

// ...

// method10

}
});
}
}
catch (InvocationTargetException | InterruptedException e)
{
e.printStackTrace();
}
}
});
}
};

有人可以引用一下link并让我知道我错在哪里?

如何 fork 在后台线程中运行的方法?

最佳答案

当您已经处于 UI 线程中时,将整个代码包装在 asyncExec 中基本上不会实现任何目标(除了一些非常专门的用途)。

您必须查看代码并识别在后台线程中运行的每个部分。在这些地方对 UI 操作的任何访问都必须在此时使用 asyncExec(或syncExec)调用。

传递给 ProgressMonitorDialogIRunnableWithProgress 在后台线程中运行。因此,每次访问 IRunnableWithProgress 代码中的任何 UI 对象时,都必须使用单独的 asyncExecsyncExec 调用。

所以类似:

Listener enterlisner = new Listener() {
@Override
public void handleEvent(Event event)
{
if ((event.keyCode == SWT.CR || event.keyCode == 13 || event.type == SWT.Selection) && btnAdd.isEnabled())
{
new ProgressMonitorDialog(shell).run(true, true, new IRunnableWithProgress()
{
@Override
public void run(final IProgressMonitor monitor) throws IvocationTargetException, InterruptedException
{
... code not using UI

Display.getDefault().asyncExec(... code using UI ....);

... more code not using UI

Display.getDefault().asyncExec(... more code using UI ....);
}
}
}
}

关于java - Display.getDefault().asyncExec 给出 InspirationTargetException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38821928/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com