【问题标题】:Progress bar for MySQL connectionMySQL 连接进度条
【发布时间】:2013-09-07 09:30:05
【问题描述】:

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

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

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

我想在连接之间取得进展。

请我不是要求您进行完整的编码等。请告诉我如何实现它?

【问题讨论】:

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

标签: java mysql jdbc database-connection progress


【解决方案1】:

我认为您可以显示不确定的JProgressBar(请参阅How to Use Progress Bar),因为您无法确切知道给定时间的进度。还可以使用SwingWorker 在后台建立连接,避免阻止EDT。小代码sn-p:

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

你会看到这样的东西:

【讨论】:

    【解决方案2】:

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

    但您可以显示任何类型的动画来指示连接继续进行。

    在相应的绘制事件轮到它之前,JProgressBar 不会被更新。因此,如果您还没有这样做,您应该将连接例程移到另一个线程。

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

    【讨论】:

    • 回复。第 3 段重新。线程,SwingWorker 很适合。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2015-09-20
      • 2022-12-02
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      相关资源
      最近更新 更多