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