gpt4 book ai didi

java - 当套接字被接受时,我怎样才能关闭这个对话框?

转载 作者:行者123 更新时间:2023-11-30 07:46:25 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

此外,您需要将 JDialog 的范围扩展到类,而不是通过在类范围中声明方法 waitConnection() 来扩展它。

How this code works ?

Socketaccept()是一个阻塞方法,除非建立连接,否则不会执行;否则会发生套接字超时。您可以删除超时部分,这只是一个示例。因此,一旦客户端连接到服务器套接字,就会导致执行下一条语句,该语句将处理 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
}

关于java - 当套接字被接受时,我怎样才能关闭这个对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33877854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com