JFrame застыл после нажатия кнопки JButton

#java

Вопрос:

У меня есть JFrame, называемый фреймом управления продуктами, и в нем есть вставка и кнопка «Показать». Поэтому, если я нажму кнопку Вставить, она вставит все данные(Имя, имя пользователя, пароль, идентификатор пользователя) в базу данных.

Проблема в том, что если я нажму кнопку «Вставить» во второй раз после нажатия кнопки «Показать», которая отображает данные из базы данных в JTable, мой JFrame замерзнет и наоборот.

Вот мой код, который находится внутри метода showData() и вызывается из прослушивателя действий кнопки «Показать».

 ResultSet r = s.executeQuery("SELECT * FROM EmployeeTable");
            r.last();
            r.beforeFirst();
            while (r.next()) {
                String name1 = r.getString("EmployeeName");
                String userID = r.getString("UserID");
                String username = r.getString("Username");
                String password = r.getString("Password");
                String[] data = {name1, userID, username, password};
                         DefaultTableModel m1 = (DefaultTableModel) table.getModel();
                m1.addRow(data);
                table.setModel(m1);
 

Есть ли какие-то решения или вы, ребята, можете подсказать мне, что мне делать?

Комментарии:

1. взгляните на SwingWorker то, как обработать вызов базы данных без замораживания пользовательского интерфейса

2. Спасибо вам за ваш ответ. Я попробую это сделать.

Ответ №1:

Действительно трудно понять, что происходит без кода, который создает рамку и кнопку. Просто убедитесь, что вы используете графический интерфейс под SwingUtilities.invokeLater, как это:

 SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        createAndShowGUI();
    }
});
 

Вы можете прочитать все, что вам нужно, на:

https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html

Комментарии:

1. Спасибо вам за ваш ответ. Я попробую это сделать.

2. Добро пожаловать!