Java 引发异常后的空白消息对话框

Java 引发异常后的空白消息对话框,java,swing,exception-handling,joptionpane,event-dispatch-thread,Java,Swing,Exception Handling,Joptionpane,Event Dispatch Thread,我正在学习Java,并尝试制作一个简单的客户机-服务器应用程序。我的服务器有GUI和启动服务器的按钮。单击后,将启动另一个线程。我称之为主服务器线程,因为它处理连接和handels客户端。我也有关闭服务器的按钮,但不是整个应用程序。我关闭ServerSocket以中断此线程,以便停止服务器。我希望消息对话框弹出inf finally块,通知我服务器停止运行。 下面是服务器运行方法的简化和修改代码: public void run(){ try{ JOptionPane.sho

我正在学习Java,并尝试制作一个简单的客户机-服务器应用程序。我的服务器有GUI和启动服务器的按钮。单击后,将启动另一个线程。我称之为主服务器线程,因为它处理连接和handels客户端。我也有关闭服务器的按钮,但不是整个应用程序。我关闭ServerSocket以中断此线程,以便停止服务器。我希望消息对话框弹出inf finally块,通知我服务器停止运行。 下面是服务器运行方法的简化和修改代码:

public void run(){
    try{
      JOptionPane.showMessageDialog(null,"begining");      
      ss = new ServerSocket(TCP_PORT);

    while(cont){

       Socket sock = ss.accept();
       exec.execute(new ServerThread(sock));

    }catch(SocketException soex){
      //JOptionPane.showMessageDialog(null,"SocketException");
    }finally{
      JOptionPane.showMessageDialog(null,"finally");
    }
    //JOptionPane.showMessageDialog(null,"after finally");
  }
第一个消息对话框显示正确,但当其他3个对话框中的一些由于异常而弹出时,我只得到带有标题和窗口边框的灰色消息对话框,但没有消息或任何按钮。我无法关闭它,我无法关闭我的应用程序。它在那里卡住了

我使用的是Ubuntu,它是用开放jdk javac版本“1.7.0_25”编译的,并用相同版本的java运行。我还尝试了版本1.6,以及Oracle 1.7.0_25(java和javac)。每次我都得到同样的结果

这里的问题是什么?我如何解决它?

  • 您对所有更新都有问题

  • 所有必须在上创建,对其派生项()有效

  • 请参阅,然后应用程序是TaskManager的候选程序(仅可能终止)

      • 您对所有更新都有问题

      • 所有必须在上创建,对其派生项()有效

      • 请参阅,然后应用程序是TaskManager的候选程序(仅可能终止)


      此方法是否在EDT上运行?我想不是。Swing不是线程安全的,您不能在任何地方调用Swing方法。用于显示对话。好的,谢谢。更改JOptionPane.showMessageDialog(null,“finally”);到SwingUtilities.invokeLater(new Runnable(){public void run(){JOptionPane.showMessageDialog(null,“finally”);});此方法是否在EDT上运行?我想不是。Swing不是线程安全的,您不能在任何地方调用Swing方法。用于显示对话。好的,谢谢。更改JOptionPane.showMessageDialog(null,“finally”);到SwingUtilities.invokeLater(new Runnable(){public void run(){JOptionPane.showMessageDialog(null,“finally”);});谢谢,看起来我必须学习更多关于GUI和线程的知识。@Marko如果回答了您的问题,不要忘记接受答案。谢谢,看起来我必须学习更多关于GUI和线程的知识。@Marko如果回答了您的问题,不要忘了接受答案。