首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:“请等待”GlassPane未正确加载

Java:“请等待”GlassPane未正确加载
EN

Stack Overflow用户
提问于 2016-03-07 10:54:20
回答 1查看 103关注 0票数 1

我有一个java例程,需要几秒钟才能完成。我想加载一个GlassPane (可能在里面包含一个“预等待”消息),它可以防止用户在执行例程时修改UI,并且在例程结束时会自动隐藏。为此,我使用以下代码:

代码语言:javascript
复制
Thread t = new Thread(new Runnable(){
    @Override
    public void run() {
        /*
         * `getPresentation().getFrame()` are methods that return the 
         * Frame which contains my UI
         */
        getPresentation().getFrame().setGlassPane(myGlassPane);
        getPresentation().getFrame().getGlassPane().setVisible(true);
    }
});
t.start();

//this is the routine that takes several seconds to be executed
runCEM();

//hide the GlassPane
getPresentation().getFrame().getGlassPane().setVisible(false);

我将特定的java.awt.Cursor设置为myGlassPane。当我运行上面的代码时,我可以看到新的java.awt.Cursor出现了,但没有看到带有“请等待”消息的整个GlassPane等等.

知道是什么导致了这个问题吗?也许还有其他更好的方法来获得我想要的东西而不是使用GlassPaneThread

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-07 10:59:06

Swing并不是线程安全的,因此,您已经违反了Swing的单线程规则,可能在两个帐户上。首先,应该在EDT (事件分派线程)的上下文中显示和隐藏glassPane。

您的长时间运行的过程应该在EDT之外执行。

我能想到的最简单的解决方案是使用SwingWorker。这提供了许多有用的机制,您可以使用这些机制在另一个线程中执行长时间运行或阻塞进程,并使用这些机制安全地更新UI。

有关更多细节,请查看在Swing中并发Worker和SwingWorker

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35841888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档