使用套接字循环时Java Fx无法正常工作

时间:2019-04-18 14:58:53

标签: java sockets javafx

我在使用java fx时遇到了一些问题,我正在开发服务邮件,并且在显示服务器阶段(使用java fx)时遇到了问题。 通过使用我创建的MVC模式: 1)MainServer.java(我在其中启动Java fx应用程序) 2)ControllerServer.java(Controller类) 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中(因此服务器在打开时需要显示阶段)

1 个答案:

答案 0 :(得分:-1)

不得不编辑我的答案,因为最后它可以正常工作,但不能正常工作,现在我可以在此类中看到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();
    }
}