Java MySQL连接的进度条

Java MySQL连接的进度条,java,mysql,jdbc,database-connection,progress,Java,Mysql,Jdbc,Database Connection,Progress,我正在使用JDBC将我的程序链接到MySQL 我注意到建立到MySQL的连接大约需要6-10秒。 我想使用JProgressBar来显示连接的进度,这样用户就不必认为我的程序崩溃了 我尝试在代码前后插入一个简单的print语句。create连接后的print语句仅在6-10秒后打印 我想在连接之间取得进展 请告诉我如何实现它?我认为不可能显示真正的进展,因为mysql连接过程只是一个tcp握手和两个数据报 但是,您可以显示任何类型的动画,以指示连接正在进行 JProgressBar将不会更新,直

我正在使用JDBC将我的程序链接到MySQL


我注意到建立到MySQL的连接大约需要6-10秒。 我想使用JProgressBar来显示连接的进度,这样用户就不必认为我的程序崩溃了

我尝试在代码前后插入一个简单的print语句。create连接后的print语句仅在6-10秒后打印

我想在连接之间取得进展


请告诉我如何实现它?

我认为不可能显示真正的进展,因为mysql连接过程只是一个tcp握手和两个数据报

但是,您可以显示任何类型的动画,以指示连接正在进行

JProgressBar将不会更新,直到相应的绘制事件达到其轮次。所以,如果您还没有这样做,您应该将连接例程移动到另一个线程


如果您的打印是一个简单的控制台打印,我认为它应该可以工作。但是,如果您打印到某个GUI组件,它将不会立即更新

使用连接池。抓取应用程序启动时的连接,并在那里使用进度条。

在这一部分,应该很容易做到这一点,因为您可以只是“阻塞”,直到一个标志变为真(这意味着您已经创建了连接),这更自然。我认为您可以显示一个不确定的
JProgressBar
(请参阅),而不是在用户执行某项操作时显示进度条,因为您无法确切了解给定时间的进度。还可以使用
SwingWorker
在后台建立连接,以避免阻塞。小代码段:

 public static void main(String[] args) {
    JFrame frame = new JFrame("Test");
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.setLayout(new FlowLayout());
    frame.setLocationRelativeTo(null);

    final JProgressBar jProgressBar = new JProgressBar();
    final JLabel status = new JLabel("Connecting...");
    frame.add(status);
    frame.add("jProgressBar", jProgressBar);

    frame.pack();
    frame.setVisible(true);

    SwingWorker sw = new SwingWorker() {
        @Override
        protected Object doInBackground() throws Exception {
            jProgressBar.setIndeterminate(true);
            Thread.sleep(6000); // Here you should establish connection
            return null;
        }

        @Override
        public void done(){
            jProgressBar.setIndeterminate(false);
            status.setText("Successful");
            jProgressBar.setValue(100); // 100%
        }
    };
     sw.execute();        
}
你会看到这样的情况:


“我注意到与MySQL建立连接可能需要6-10秒”-服务器在哪里?在火星上?6-10秒?你需要仔细研究一下,为什么要花这么多时间。@MitchWheat不,这是一个本地主机连接。我不知道为什么,但是第一次(第一次连接)确实需要6-10秒!但随后的连接是在一秒钟内获得的。@user2756339因此,如果您认为这需要很多时间(通常不会),请将其作为一个单独的线程。可能是网络(DNS或代理)问题导致了这一点。不会花那么长时间的。第3段re。线程,
SwingWorker
对这一点很好。