Java качели jlabel.settext не сразу - PullRequest
0 голосов
/ 20 января 2012

Добрый день, у меня возникла проблема с попыткой получить текст на этикетке с надписью «подключение ...» до начала попытки подключения и что-то еще после подключения. Когда запускается приведенный ниже код, 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 голосов
/ 20 января 2012

Проблема в том, что вы пытаетесь подключиться к базе данных в вашем EventDispatcherThread, который в основном является потоком, отвечающим за все элементы графического интерфейса, которые у вас есть.Поток тратит время на подключение к базе данных и, как только он завершает (т.е. подключается к базе данных), обновляет ваш графический интерфейс.

Вы можете использовать что-то подобное, чтобы заставить его работать:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...