Điều này có thể là một điều rất đơn giản mà tôi đang nhìn, nhưng tôi dường như không thể tìm ra nó.JOptionPane.showMessageDialog đợi cho đến khi OK được nhấp?
tôi có phương pháp sau đó cập nhật một JTable:
class TableModel extends AbstractTableModel {
public void updateTable() {
try {
// update table here
...
} catch (NullPointerException npe) {
isOpenDialog = true;
JOptionPane.showMessageDialog(null, "No active shares found on this IP!");
isOpenDialog = false;
}
}
}
Tuy nhiên, tôi không muốn isOpenDialog
boolean được thiết lập là false cho đến khi nút OK trên hộp thoại thông báo được nhấn, bởi vì nếu người dùng nhấn enter nó sẽ kích hoạt một sự kiện KeyListener
trên một trường văn bản và nó kích hoạt lại toàn bộ khối mã nếu nó được đặt thành false
.
Một phần của mã KeyListener được hiển thị dưới đây:
public class KeyReleased implements KeyListener {
...
@Override
public void keyReleased(KeyEvent ke) {
if(txtIPField.getText().matches(IPADDRESS_PATTERN)) {
validIP = true;
} else {
validIP = false;
}
if (ke.getKeyCode() == KeyEvent.VK_ENTER) {
if (validIP && !isOpenDialog) {
updateTable();
}
}
}
}
Liệu JOptionPane.showMessageDialog()
có một số loại cơ chế có thể ngăn chặn thực hiện các dòng tiếp theo cho đến khi nút OK được nhấn? Cảm ơn bạn.
hoạt động Swing (chẳng hạn như mở một hộp thoại) nên xảy ra trong EventDispatchThread –
Đồng ý với tiếng ồn: loại mã này không thuộc về trong một ứng dụng Swing vì nó hoàn toàn bỏ qua các quy tắc luồng Swing. –
Ngay cả khi tôi đồng ý rằng thao tác Swing phải xảy ra trong Event Dispatcher Thread, vì phương thức main() trong lịch trình ứng dụng swing xây dựng GUI trong Thread Dispatcher Thread và thoát. nhưng Quy tắc được mô tả trong sách là vì thế giới lý tưởng, và đôi khi người ta cần phải là một người nổi dậy để hoàn thành công việc. –