Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于Swing的加载框架挂起在DB查询上_Java_Swing_Jdbc_Loading_Event Dispatch Thread - Fatal编程技术网

Java 基于Swing的加载框架挂起在DB查询上

Java 基于Swing的加载框架挂起在DB查询上,java,swing,jdbc,loading,event-dispatch-thread,Java,Swing,Jdbc,Loading,Event Dispatch Thread,我知道有很多类似的主题,但我不能将这些解决方案应用到我的项目中 我有一个巨大的Java应用程序,其中有许多耗时的数据库操作。一切都在一个线程中实现,因此当程序查询数据库时,UI挂起。我有一个任务,在描述的情况下创建一个加载窗口。我尝试了JWindow对象,JFrame总是在顶部,模式对话框,但是没有一个能够工作 事情是这样的: 我有JDialog,它包含JPanel。该面板包括两个输入字段(登录和密码)和登录按钮。当用户按“登录”时,应该会出现(在顶部)“加载…”窗口。对话框是模态的,并且始终处

我知道有很多类似的主题,但我不能将这些解决方案应用到我的项目中

我有一个巨大的Java应用程序,其中有许多耗时的数据库操作。一切都在一个线程中实现,因此当程序查询数据库时,UI挂起。我有一个任务,在描述的情况下创建一个加载窗口。我尝试了
JWindow
对象,
JFrame
总是在顶部,模式对话框,但是没有一个能够工作

事情是这样的: 我有
JDialog
,它包含
JPanel
。该面板包括两个输入字段(
登录
密码
)和登录按钮。当用户按“登录”时,应该会出现(在顶部)“加载…”窗口。对话框是模态的,并且始终处于顶部

我该怎么做

我得到的最接近的解决方案是:

JDialog modalDialog = new JDialog(dialog, "Busy", ModalityType.MODELESS);
modalDialog.add(new JLabel("Loading..."));
modalDialog.setSize(200, 150);
modalDialog.setLocationRelativeTo(dialog);
modalDialog.setVisible(true);
但是对话框本身绘制得不好:

它包含来自背景的元素,而不是加载文本…

加载完成后,显示
加载。。。文本
,视需要而定

当我加上

      modalDialog.setUndecorated(true);

它不会在第一个平面上绘制。。。我不想要一个带有[X]

的条,不要将耗时的操作与Swing UI操作放在同一个线程上。所有Swing UI操作都发生在“事件调度线程”上,您可以自行决定是否停止耗时的操作

查看javax.swing.SwingWorker,了解一个类,它可以轻松地将耗时的操作放在不同的线程上


查看一个javax.swing.JProgressBar,它允许您在耗时的操作过程中显示进度条。

尝试更新并重新绘制。不要阻止EDT(事件调度线程)-发生这种情况时,GUI将“冻结”。不要调用
Thread.sleep(n)
为重复任务执行Swing
计时器,或为长时间运行的任务执行
SwingWorker
。请参阅了解更多详细信息。“我知道有很多类似的主题,但我无法将这些解决方案应用到我的项目中。”为什么不呢?链接到前5名。我已经试过了,但问题是我不能用setAlwaysOnTop拥有两个帧(真的)-我花了将近3天的时间来解决:),我仍然不知道为什么我粘贴的代码不起作用。是的,我知道,但就像我说的,这不是我的应用:)事实上,你说“我有一个应用程序…”,但没有说它不是“你的”。这仍然是解决问题的方法。。我发现当有两个调用了setAlwaysOnTop(true)的帧时,就会出现所描述的问题。因此,取消对该方法的一次调用就解决了我的问题。我想知道我是因为糟糕的英语还是因为一个愚蠢的问题得了-2分:)我想这不是这两个问题,而是问题的模糊性。我们这些试图帮助你的人并没有足够的信息,事实证明我对问题的猜测并不是真正的问题。过了一段时间,我们就不再回答这样的问题了,因为这往往是浪费时间。好吧,我保证以后会更准确。谢谢