Как я могу обновить TextArea из другого приложения, которое создает поток для запуска GUI? - PullRequest
0 голосов
/ 02 мая 2019

Я настраиваю сервер, который запускает графический интерфейс с потоком, в котором я хочу обновить TextArea, создавая своего рода журнал: когда клиент подключается или что-то делает, но я не могу получить графический интерфейс для обновления,Каждый раз, когда я пытался, я получаю NullPointerException

Пытался получить контроллер с помощью некоторых методов, но безуспешно

Код сервера

public class Server{

    public static void main(String[] args) throws IOException{
        Thread l = new Thread(){
            public void run(){
                javafx.application.Application.launch(Logger.class);
            }
        };
        l.start();
        ServerSocket server = new ServerSocket(8189);
            while(true){
               Socket s = null;
            try{
                s = server.accept();

                ObjectInputStream input = new 
                ObjectInputStream(s.getInputStream());
                ObjectOutputStream output = new 
                ObjectOutputStream(s.getOutputStream());

                Thread t = new ClientHandler(s, input, output);
                t.start();
            }catch(IOException e){
                s.close();
                System.out.println(e.getMessage());
            }
            }
        }

}

Код контроллера

public class Controller implements Initializable{

    @FXML
    public TextArea log = new TextArea();

    public void logger(String s){
        log.appendText(s);
    }

    @Override
    public void initialize(URL url, ResourceBundle rb){
        log.setText("Log has started...");
    } 

}

1 Ответ

0 голосов
/ 03 мая 2019

Причиной исключения NullPointerException является эта строка

@FXML
public TextArea log = new TextArea();

он уже инициализируется в FXML, поэтому просто сделайте

@FXML
public TextArea log;
...