gpt4 book ai didi

java - JInternalFrame 不会出现

转载 作者:行者123 更新时间:2023-11-29 03:42:34 26 4
gpt4 key购买 nike

我有一个名为 GameUpdater 的 Java 类,它扩展了 JInternalFrame。当我将类作为一个程序单独运行时,它曾经扩展 JFrame,但我将其更改为 JInternalFrame 以成为更大应用程序的一部分 - 现在可以通过菜单按钮访问。

当我按下这个菜单按钮时调用的函数如下:

private void update(){

GameUpdater gu = new GameUpdater();
desktop.add(gu); //add to JDesktopPane
gu.setSize(400, 300);
gu.setVisible(true);

gu.readMatches();//this function takes ages

gu.setMatch("Updating database...");//this is some output to the user, displays info in the internal frame
//try and insert into database
for(Match m : gu.getMatches()){
db.insertMatch(m);
}
gu.setMatch("DONE"); //now it shows the frame, way too late
}

gu.readMatches() 方法需要很长时间才能执行,因此它会定期更新 JInternalFrame 中的内容以显示其进度。但是,直到此更新功能完成后才显示框架!

好像setVisible(true)一直等到函数结束...

当它是 JFrame 时,它​​工作得非常好。 JInternalFrame 是否有任何奇怪的属性会导致这种情况?

干杯

最佳答案

听起来您正在 Event Dispatching Thread 中执行一个耗时的过程(美国东部时间),这将阻止事件队列处理(除其他事项外)重绘请求。

这会使您的程序看起来好像“挂起”了。

您需要将此任务卸载到后台线程。

通读Concurrency in Swing ,尤其是关于 Worker Threads and SwingWorker 的部分

关于java - JInternalFrame 不会出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12465619/

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