[英]Java Fx not working properly when using socket loop
我在使用Java FX时遇到一些问题,正在开发服务邮件,并且在显示服务器阶段(使用Java FX时)遇到了问题。 通过使用我创建的模式MVC:1)MainServer.java(在其中启动Java fx应用程序的地方)2)ControllerServer.java(控制器类)3)ServerLog.java(模型类,对我的问题并不重要,但必须提及它)。
现在,我有另一个名为Server.java的类,其中包含真实的服务器代码,我试图通过将Server.java代码移入ControllerServer.java来将MainServer.java与Server.java合并,服务器运行良好,但是阶段未显示在这个阶段,我认为问题出在可初始化内部的while循环中。
public class Server {
private static Object lock = new Object();
private static ServerLog serverLog = new ServerLog();
public static void getService(Socket s) throws IOException {
// not important for my question so deleted
}
public static void main(String[] args){
new File("users").mkdir();
try {
ServerSocket socket = new ServerSocket(8189);
while(true) {
Socket s = socket.accept();
getService(s);
}
}catch(IOException e){e.printStackTrace();}
}
}
public class ServerMain extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("View/server.fxml"));
primaryStage.setScene(new Scene(root, 800, 600));
primaryStage.setTitle("Server Log");
primaryStage.show();
}
}
public class ControllerServer implements Initializable {
@FXML
private ListView myListView;
//protected List<String> listLog = new ArrayList<>();
protected ListProperty<String> listProperty = new SimpleListProperty<>();
private ServerLog serverLog = new ServerLog();
@Override
public void initialize(URL location, ResourceBundle resources) {
try {
serverLog.fillLogList();
} catch (IOException e) {
e.printStackTrace();
}
if (serverLog.logList!= null) {
for (int i = 0; i < serverLog.logList.size(); i++) {
System.out.println(serverLog.logList.get(i));
}
ObservableList<String> seasonList = FXCollections.observableArrayList(serverLog.logList);
myListView.setItems(seasonList);
}
}
}
我想要做的是删除ServerMain.java并将ServerMain.java所做的事情转移到Server中(因此服务器在打开时需要显示阶段)
必须编辑我的答案,因为最后它能正常工作,但不能正常工作,现在我可以在此类上正确地看到java fx阶段,但服务器正确停止了工作,因此,如果有人有更好的解决方案,我将很荣幸阅读此解决方案:( 。
public class Server extends Application {
private static Object lock = new Object();
private static ServerLog serverLog = new ServerLog();
public static void getService(Socket s) throws IOException { ... }
public static void main(String[] args){
launch(args);
new File("users").mkdir();
try {
ServerSocket socket = new ServerSocket(8189);
while(true) {
Socket s = socket.accept();
getService(s);
}
}catch(IOException e){e.printStackTrace();}
}
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("View/server.fxml"));
primaryStage.setScene(new Scene(root, 800, 600));
primaryStage.setTitle("Server Log");
primaryStage.show();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.