Конфликты между JavaFX и Socket - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь настроить сервер с простым графическим интерфейсом, где я печатаю, когда клиент устанавливает соединение и выполняет его стандартные операции.Проблема возникает, когда я пытаюсь выполнить ее, потому что графический интерфейс не запускается (даже если NetBeans говорит, что программа выполняется), и я не могу понять, есть ли какой-то конфликт между потоками или я вызвал его вкрылатый путь.Это код, с которого запускается программа:

public class Server extends Application {

@Override
public void start(Stage stage) throws Exception {
    FXMLLoader sLoader = new FXMLLoader(getClass().getResource("server.fxml"));

    BorderPane root = new BorderPane(sLoader.load());

    ServerController sController = sLoader.getController();
    sController.initModel();
    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.show();
}

Это контроллер Сервера, который я поместил здесь, в функции init, часть, где Socket ожидает клиента:

public class ServerController {

@FXML
private TextArea textarea;

public void initModel() {
    try {
        int i = 1;
        ServerSocket s = new ServerSocket(5000);

        while (true) {
            Socket incoming = s.accept(); // si mette in attesa di richiesta di connessione e la apre
            textarea.setText("In attesa di connessioni...");
            Runnable r = new ThreadedEchoHandler(incoming, i);
            new Thread(r).start();
            i++;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

class ThreadedEchoHandler implements Runnable {

    private Socket incoming;
    private int counter;

    /**
     * Constructs a handler.
     *
     * @param i the incoming socket
     * @param c the counter for the handlers (used in prompts)
     */
    public ThreadedEchoHandler(Socket in, int c) {
        incoming = in;
        counter = c;
    }

    //Con questo gestisco le stringhe
    public void run() {
        try {
            try {
                InputStream inStream = incoming.getInputStream();
                OutputStream outStream = incoming.getOutputStream();

                Scanner in = new Scanner(inStream);
                PrintWriter out = new PrintWriter(outStream, true);

                //out.println("Hello! Enter BYE to exit.");

                // echo client input
                boolean done = false;
                while (!done && in.hasNextLine()) {
                    String line = in.nextLine();
                    //out.println("Echo: " + line);
                    //System.out.println("ECHO: " + line);
                    if (line.trim().equals("BYE")) {
                        done = true;
                    }
                }
            } finally {
                incoming.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...