我正在使用 JDBC 将我的程序链接到 MySQL。
我注意到建立与 MySQL 的连接可能需要大约 6-10 秒。我想使用 JProgressBar 来显示连接的进度,这样用户就不必认为我的程序崩溃了。
我尝试在代码前后插入一个简单的打印语句。创建连接后的打印语句仅在 6-10 秒后打印。
我想在连接之间取得进展。
请我不是要求您进行完整的编码等。请告诉我如何实现它?
我正在使用 JDBC 将我的程序链接到 MySQL。
我注意到建立与 MySQL 的连接可能需要大约 6-10 秒。我想使用 JProgressBar 来显示连接的进度,这样用户就不必认为我的程序崩溃了。
我尝试在代码前后插入一个简单的打印语句。创建连接后的打印语句仅在 6-10 秒后打印。
我想在连接之间取得进展。
请我不是要求您进行完整的编码等。请告诉我如何实现它?
我认为它不可能显示真正的进展,因为 mysql 连接过程只是一个 tcp 握手和几个数据报。
但是您可以显示任何类型的动画来指示连接继续进行。
JProgressBar 将不会更新,直到相应的绘制事件轮到它为止。因此,如果您还没有这样做,您应该将连接例程移动到另一个线程。
我认为,如果您的打印是简单的控制台打印,它应该可以工作。但是如果您打印到某个 GUI 组件,它不会立即更新。
我认为您可以显示不确定的JProgressBar
(请参阅如何使用进度条),因为您无法确切知道给定时间的进度。也用于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();
}
你会看到这样的东西:
使用连接池。在您的应用程序的启动中获取连接并在那里使用进度条。
在这部分应该很容易做到这一点,因为您可以“阻止”直到例如标志变为真(这意味着您的连接已经创建)并且它更自然。而不是在用户做某事时显示进度条