gpt4 book ai didi

java - 关闭应用程序时 SWT 更新 UI

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

我有一个处于关闭状态的事件监听器,在监听器内我需要在 UI 文本字段中显示一些消息。但是,即使使用了syncExec,UI 似乎也没有更新,Runnable 也不会更新UI。

    shell.addListener(SWT.Close, new Listener() {
public void handleEvent(Event event) {

display.asyncExec(new Runnable() {
public void run() {
if(!text.isDisposed()) {
text.setText("app closing");
}
});
});

while(!shell.isDisposed()) {
if(!display.readAndDispatch()) {
display.sleep();
}
}

有什么想法吗?我是 SWT 新手。谢谢

最佳答案

SWT.Close 事件在 shell 实际释放之前发送。当代码返回到主 while(!shell.isDispose()) 循环时,shell 将被标记为已处理,因此循环将终止,并且 UI 不会再次更新(这是实际更新 UI 的 display.readAndDispatch() 调用。

您可以通过在关闭监听器中调用 readAndDispatch 来使其工作,尽管我真的不喜欢这样:

shell.addListener(SWT.Close, event -> {
text.setText("app closing");

Display display = shell.getDisplay();

// Get events from setText dispatched
while (display.readAndDispatch())
{ /* Do nothing */ }

display.update();

// TODO may need to sleep here
});

在这里测试这个事件后,shell 关闭得如此之快,以至于没有时间查看更新 - 我不得不在监听器末尾添加 sleep (这更难看)。

关于java - 关闭应用程序时 SWT 更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62273399/

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