gpt4 book ai didi

java - SWT、多线程和异常

转载 作者:行者123 更新时间:2023-12-01 09:37:06 26 4
gpt4 key购买 nike

我在主 GUI 程序中使用 SWT。在其中,我创建另一个线程来运行一些程序。但是,如果在这些过程中遇到一些错误,我想通过显示消息框来向用户报告此情况。因为在 SWT 中,只有一个线程可以执行 GUI 操作,所以我让程序运行程序抛出异常,以便 GUI 线程可以处理它们。但是,我遇到了问题,因为我为程序运行程序创建了一个新线程(为了不占用 GUI 线程,该线程将不断更新和刷新一些图形),但结果是,发生的异常被卡住作为该线程的一部分,它不能创建错误消息框。关于如何处理这个问题有什么建议吗?

private void goButtonActionPerformed()
{
// create the program runner object
ProgramRunner PR = new ProgramRunner(); // real code passes in data to be used

try{
// check all necessary parameters are entered
boolean paramsOK = PR.checkParams();
if (paramsOK)
{
// all necessary information is available. Start Processing.
Thread t = new Thread() {
public void run()
{
try{
PR.runPrograms();
}
catch (IOException iox)
{
// This does not work to catch & display the exceptions
// which took place in PR.runPrograms(), because this
// thread is not allowed to perform GUI operations.
// However, I don't know how to pass this
// exception / error notification out of this thread.
MessageBox mb = new MessageBox(m_Shell, SWT.ICON_ERROR);
mb.setMessage(iox.getMessage());
mb.open();
}
}
};
t.start();
}
}
catch (IOException iox)
{
// this works to catch & display the exceptions which took place
// in PR.checkParams() because that is not a separate thread
MessageBox mb = new MessageBox(m_Shell, SWT.ICON_ERROR);
mb.setMessage(iox.getMessage());
mb.open();
}

最佳答案

将 catch 逻辑封装在 Display.getDefault().asyncExec 中以在 UI 线程上显示错误消息:

Thread t = new Thread()
{
public void run()
{
try
{
PR.runProgram();
}
catch ( final IOException iox )
{
Display.getDefault().asyncExec( new Runnable()
{
public void run()
{
MessageBox mb = new MessageBox(m_Shell, SWT.ICON_ERROR);
mb.setMessage(iox.getMessage());
mb.open();

}
});

}
}
});

t.start();

然后可以在 UI 线程中显示异常。

关于java - SWT、多线程和异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38798511/

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