我创建了javafx应用程序,并且必须将其与ServerSocket组合在一起,但是当我使用ServerSocket的功能接受时,该应用程序将熄灭。我期望的是让应用程序等待,直到有Socket连接并运行下一个方法。我不知道会发生什么,但是当我注释掉ServerSocket.accept()这一行时,它工作得很好。我已经尝试阅读ServerSocket的api文档,但没有发现任何帮助,或者可能我对此太呆板了。
主要
package test;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.net.ServerSocket;
public class ProblemTest extends Application {
public static void main(String[] args) throws Exception{
launch(args);
}
public void start(Stage primaryStage)throws Exception{
FXMLLoader loader = new FXMLLoader(getClass().getResource("test.fxml"));
Parent root= loader.load();
Scene scene=new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
ServerSocket server=new ServerSocket(8000);
server.accept();
}
}
Fxml文件:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.VBox?>
<VBox prefHeight="400.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1">
<children>
<MenuBar>
<menus>
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem mnemonicParsing="false" text="Clear" />
<MenuItem mnemonicParsing="false" text="Close" />
</items>
</Menu>
</menus>
</MenuBar>
<TextArea prefHeight="377.0" prefWidth="640.0" />
</children>
</VBox>
```
答案 0 :(得分:2)
server.accept()
阻止应用程序线程,您需要在另一个线程中调用accept()
。
new Thread(() -> {
... new ServerSocket(8000).accept();
}).start()