javafx之间的套接字通信
Socket communication between javafx
您好,我在将套接字与 javafx 应用程序一起使用时遇到问题。
客户代码
@FXML
private void onSetupGameClick() {
try{
Socket s=new Socket("localhost",6666);
DataOutputStream dout=new DataOutputStream(s.getOutputStream());
dout.writeUTF("Hello Server");
dout.flush();
dout.close();
s.close();
}catch(Exception e){
System.out.println(e);
}
}
以上代码在单击按钮时启动套接字服务器。
服务器代码
@Component
public class WelcomeController implements BootInitializable {
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
try {
ServerSocket ss=new ServerSocket(6666);
Socket s=ss.accept();//establishes connection
DataInputStream dis=new DataInputStream(s.getInputStream());
String str=(String)dis.readUTF();
System.out.println("message= "+str);
lblGame.setText(str);
ss.close();
System.out.println("Connection created");
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上代码将在其他 javafx 应用程序上创建客户端。
问题是,当客户端应用程序启动时,它不会显示 UI,我认为它会等待服务器连接。当服务器应用程序启动时,客户端 ui 将显示 up.How 以解决此问题。
JavaFX 有自己的运行线程,并处理图形用户界面。当您在该线程上执行阻塞任务时,它将阻塞 gui。您可以做的一件事是在您的按钮处理程序中启动一个新线程。
new Thread(()->{onSetupGameClick();}).start();
我希望你能看到这是一个糟糕的设计,因为你可以累积多个启动线程。
也许可以查看类似这样的内容 以获得更完整的示例。
您好,我在将套接字与 javafx 应用程序一起使用时遇到问题。
客户代码
@FXML
private void onSetupGameClick() {
try{
Socket s=new Socket("localhost",6666);
DataOutputStream dout=new DataOutputStream(s.getOutputStream());
dout.writeUTF("Hello Server");
dout.flush();
dout.close();
s.close();
}catch(Exception e){
System.out.println(e);
}
}
以上代码在单击按钮时启动套接字服务器。
服务器代码
@Component
public class WelcomeController implements BootInitializable {
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
try {
ServerSocket ss=new ServerSocket(6666);
Socket s=ss.accept();//establishes connection
DataInputStream dis=new DataInputStream(s.getInputStream());
String str=(String)dis.readUTF();
System.out.println("message= "+str);
lblGame.setText(str);
ss.close();
System.out.println("Connection created");
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上代码将在其他 javafx 应用程序上创建客户端。 问题是,当客户端应用程序启动时,它不会显示 UI,我认为它会等待服务器连接。当服务器应用程序启动时,客户端 ui 将显示 up.How 以解决此问题。
JavaFX 有自己的运行线程,并处理图形用户界面。当您在该线程上执行阻塞任务时,它将阻塞 gui。您可以做的一件事是在您的按钮处理程序中启动一个新线程。
new Thread(()->{onSetupGameClick();}).start();
我希望你能看到这是一个糟糕的设计,因为你可以累积多个启动线程。
也许可以查看类似这样的内容