#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. Добро пожаловать!