Java swing jlabel.settext不是立竿见影的

时间:2012-01-20 12:03:10

标签: java netbeans

美好的一天,我遇到了一个问题,试图让标签上的文字在连接尝试开始之前说'连接...',并在连接之后再做其他事情。当下面的代码运行时,只有一切都完成后才会显示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);
    }

}

1 个答案:

答案 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