Всплывающее сообщение, которое происходит до определенного состояния

Я пишу игру в java playable в Интернете. Я использую потоки для отправки и получения данных.

Мой вопрос: как отобразить всплывающее окно, которое сообщит пользователю, что он должен ждать.

Я написал это:

while(!in.ready())
 JOptionPane.showMessageDialog(this, "Not your turn");

Он работает, а также не позволяет пользователю нажимать кнопки, но также заставляет постоянно нажимать кнопку "ОК". Итак, есть ли всплывающие окна, которые невозможно закрыть, пока поток "in" не будет готов? Или любой другой вариант, который работает?

2 ответа

Вам нужно будет создать свой собственный. Пример:

class CustomBlockerDialog extends JDialog {
 public CustomBlockerDialog(Frame owner, String text) {
 super(owner, true);
 setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
 setSize(300, 100); // Adjust if needed
 setTitle("");
 add(new JLabel(text, SwingConstants.CENTER));
 } 
}

И показать/скрыть (из главного окна):

CustomBlockerDialog block = new CustomBlockerDialog(this, "Not your turn"); // Creation, once

block.setVisible(true); // Show

block.setVisible(false); // Hide

Не забудьте вызвать их с помощью SwingUtilities.invokeLater из других потоков.


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

final JDialog dialog = new JDialog();

 dialog.setPreferredSize(new Dimension(300, 90));
 dialog.add(new JLabel(" Please Wait..."));
 dialog.setUndecorated(true); // hide close button
 dialog.pack();
 dialog.setLocation(400, 400); // or next line
 //dialog.setLocationRelativeTo(this);
 dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
 dialog.setVisible(true);


 while(!in.ready()){ /* wait...*/ };


 SwingUtilities.invokeLater(new Runnable() {

 @Override
 public void run() {
 dialog.setVisible(false);
 dialog.dispose();
 }
 });

licensed under cc by-sa 3.0 with attribution.