美好的一天,我遇到了一个问题,试图让标签上的文字在连接尝试开始之前说'连接...',并在连接之后再做其他事情。当下面的代码运行时,只有一切都完成后才会显示settext。如何在连接尝试之前显示第一个settext?
private void buttonConnectActionPerformed(java.awt.event.ActionEvent evt) {
try {
String url = "jdbc:mysql://domain.com:3306/tablename";
String user = "username";
String password = "userpassword";
jLabel.setText("Connecting ...");
con = DriverManager.getConnection(url, user, password);
jLabel.setText(con.getCatalog());
} catch (SQLException ex) {
Logger.getLogger(connection.class.getName()).log(Level.SEVERE, null, ex);
}
}
答案 0 :(得分:0)
问题是您正在尝试连接到EventDispatcherThread中的数据库,该数据库基本上是负责您拥有的所有GUI项目的线程。线程正在花时间连接到数据库,一旦完成(即它连接到数据库),它就会更新你的GUI。
你可以使用这样的东西来使它工作:
private void buttonConnectActionPerformed(java.awt.event.ActionEvent evt) {
jLabel.setText("Connecting ...");
new Thread(new Runnable()
{
@Override
public void run()
{
try {
String url = "jdbc:mysql://domain.com:3306/tablename";
String user = "username";
String password = "userpassword";
con = DriverManager.getConnection(url, user, password);
} catch (SQLException ex) {
Logger.getLogger(connection.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
)).start()
}
我假设con
是一个全局变量。在这种情况下,要在run()
方法中访问它,需要将其声明为final
。