我实现了以下代码,以便在我的程序执行任务时,在另一个线程中使用java中的swing运行对话事件。
public class othermain implements Runnable {
public void displayDialog() {
JPanel panel = new JPanel();
JLabel label = new JLabel("Insert text");
TextField text = new TextField(15);
panel.add(label);
panel.add(text);
String[] options = new String[]{"Cancel", "Ok"};
int option = JOptionPane.showOptionDialog(null, panel, "Ask",
JOptionPane.NO_OPTION, JOptionPane.NO_OPTION,
null, options, options[1]);
if (option == 1) {
System.out.println(text.getText());
}
}
@Override
public void run() {
this.displayDialog();
}
public static void main(String[] args) throws IOException, InterruptedException {
othermain a = new othermain();
//a.load();
Thread th = new Thread(a);
th.start();
while (true) {
System.out.println("I should never exit from the cycle");
Thread.sleep(3000);
}
}
}
这是可行的,但问题是,在macos上,一旦打开对话框,程序的图标仍保留在dock中,因此当我试图关闭它时,即使对话框已在另一个线程中执行,我的整个应用程序也会关闭。换句话说,我希望只有在按下ok按钮或cancel按钮之后,执行对话的线程才会关闭。我怎样才能避免所描述的行为,并使图标隐藏,只显示消息框,而不是图标的程序太,使它不能被手动关闭?或者,如果手动退出应用程序时无法避免这种情况,则应仅关闭正在执行该应用程序的线程,而不是关闭整个应用程序。
电流输出:
I should never exit from the cycle
I should never exit from the cycle
I should never exit from the cycle
text
I should never exit from the cycle
Process finished with exit code 0 //When I quit the application from the dock
1条答案
按热度按时间wmtdaxz31#
对于那些想知道这个问题的人,我用这个技巧解决了。
主要更新:
特别感谢用户告诉我“遵循java约定”,而不添加任何关于这个问题的额外词汇。他帮了我很多,就像很多回答他问题的用户一样。