接受套接字后如何关闭此对话框?

how can i make this dialog close when socket is accepted?

所以我正在开发一个带有套接字的游戏,目前我得到了这个:

public void waitconnection() throws IOException {
    try {
         InetAddress address= InetAddress.getLocalHost();

        final JOptionPane optionPane = new JOptionPane("IP Hosting " + direccion + " \nPuerto:5000", JOptionPane.INFORMATION_MESSAGE, JOptionPane.DEFAULT_OPTION, null, new Object[]{}, null);
        final JDialog dialog = new JDialog();
        dialog.setTitle("Esperando conexion...");
        dialog.setModal(true);
        dialog.setContentPane(optionPane);
        dialog.setLocationRelativeTo(pServidor);
        dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
    } catch (UnknownHostException ex) {
        Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
    }
    conexion = servidor.accept();

    conexion.getInetAddress().getHostAddress();//acepta el socket y guarda la ip
}

我希望对话框 window 会在找到来自客户端的连接后关闭,我怎样才能让 window 在到达连接时关闭并继续执行代码?

在添加该代码之前我有这个:

public void waitconnection() throws IOException {
    try {
        InetAddress direccion = InetAddress.getLocalHost();
        JOptionPane.showMessageDialog(null, "IP Hosting " + direccion + " Puerto:5000", "Esperando conexión", JOptionPane.INFORMATION_MESSAGE);
    } catch (UnknownHostException ex) {
        Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
    }
    conexion = servidor.accept();

    conexion.getInetAddress().getHostAddress();
}

所以当我单击“确定”时,连接已设置,游戏将在 2 台计算机上运行。

你的服务器套接字代码的变量很难读懂,我在下面的代码中用一般的方式命名它(相应地调整)。你需要写一个方法,下面写成closeDialog()[或者给个更好的名字];并首先调用构造函数,然后调用此方法,它会关闭 JDialog。

此外,您需要将 JDialog 的范围扩展到 class,而不是通过在 class 范围内声明方法 waitConnection()

How this code works ?

Socket accept()是一个阻塞方法,除非建立连接才会执行;否则会发生套接字超时。您可以删除超时部分,这只是一个示例。因此,只要客户端连接到服务器套接字,就会执行下一条处理 JDialog 的语句。

* 顺便说一句,我对 Java Swing 知之甚少,也许有更好的关闭 JDialog 的方法,但我对这个有所了解。它应该有效。

你的代码应该是这样的:-

public class Server
{
private ServerSocket serverSocket;

public Server(int port) throws IOException
{
  serverSocket = new ServerSocket(port);
  // optional timeout part depending on your application.
  serverSocket.setSoTimeout(10000);
}

public closeDialog(){
try{
Socket server = serverSocket.accept();
dialog.dispose();
// Rest of your code
}
catch(SocketTimeoutException s)
     {
        System.out.println("Socket timed out!");
     }catch(IOException e)
     {
        e.printStackTrace();
     }
  }
// Rest of your code
}