MySQL连接的进度条

时间:2013-09-07 09:30:05

标签: java mysql jdbc database-connection progress

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

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

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

我希望在连接之间取得进展。

请问我是不是要求你做完整的编码等。请告诉我如何实现它?

3 个答案:

答案 0 :(得分:1)

我认为没有可能显示真正的进展'因为mysql连接过程只是一个tcp握手和一些数据报。

但是你可以显示任何类型的动画,表明连接正在进行。

JProgressBar在相应的绘制事件到达之前不会更新。所以你应该把连接例程移到另一个线程,如果你还没有。

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

答案 1 :(得分:1)

我认为您可以展示一个不确定的JProgressBar(请参阅How to Use Progress Bar),因为您无法准确了解给定时间的进度。同时使用SwingWorker在后​​台建立连接,避免阻止EDT。小代码片段:

 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();        
}

你会看到这样的事情:

enter image description here

答案 2 :(得分:0)

使用连接池。在应用程序的启动时抓取连接并在那里使用进度条 在这一部分,应该很容易做到这一点,因为你可以“阻止”直到例如标志变为真(这表示您已创建连接),这更自然。而不是在用户做某事时显示进度条