Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 接受套接字后,如何关闭此对话框?_Java_Swing_Sockets_Network Programming_Jdialog - Fatal编程技术网

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

Java 接受套接字后,如何关闭此对话框?,java,swing,sockets,network-programming,jdialog,Java,Swing,Sockets,Network Programming,Jdialog,所以我正在开发一个带有套接字的游戏,在我得到这个的那一刻: public void waitconnection() throws IOException { try { InetAddress address= InetAddress.getLocalHost(); final JOptionPane optionPane = new JOptionPane("IP Hosting " + direccion + " \nPuerto:5000",

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

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
}
我希望对话框窗口在从客户端找到连接时关闭,我如何使窗口在到达连接时关闭并继续执行代码

在添加代码之前,我有以下几点:

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();
}

因此,当我单击“确定”时,连接已设置,游戏将在两台计算机上执行。

您的服务器套接字代码的变量很难读取,我在下面的代码中以一般方式对其命名(相应调整)。您需要编写一个如下所示的方法
closeDialog()
[或给出一个更好的名称];首先调用构造函数,然后调用这个方法,它将关闭JDialog

此外,还需要将JDialog的作用域扩展到类,而不是通过在类作用域中声明方法
waitConnection()

这段代码是如何工作的

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

*顺便说一句,我对JavaSwing知之甚少,也许有更好的方法来关闭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
}

谢谢你花时间,我尝试了你上面描述的方法,但没有成功,我意识到我的游戏在找到连接之前会崩溃,所以这可能是对你的方法没有反应的原因。不管怎样,我会离开它,就像我想出了一个选择,它是不太专业,但它的工作。但是,不管怎样,我很高兴它奏效了。