Multithreading 我如何从另一个应用程序升级TextArea,使之成为启动GUI的线程?
我正在设置一个服务器,启动一个带有线程的GUI,我想在其中更新一个TextArea,创建一种日志:当客户端连接或执行某些操作时,但我无法更新GUI。我试过的每一种方法都得到了一个NullPointerException 试图用一些方法获得控制器,但没有成功 服务器代码Multithreading 我如何从另一个应用程序升级TextArea,使之成为启动GUI的线程?,multithreading,javafx,fxml,Multithreading,Javafx,Fxml,我正在设置一个服务器,启动一个带有线程的GUI,我想在其中更新一个TextArea,创建一种日志:当客户端连接或执行某些操作时,但我无法更新GUI。我试过的每一种方法都得到了一个NullPointerException 试图用一些方法获得控制器,但没有成功 服务器代码 public class Server{ public static void main(String[] args) throws IOException{ Thread l = new Thread(
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...");
}
}
NullPointerException的原因是这一行
@FXML
public TextArea log = new TextArea();
它已经在FXML中初始化,所以只需执行以下操作
@FXML
public TextArea log;
NullPointerException的原因是这一行
@FXML
public TextArea log = new TextArea();
它已经在FXML中初始化,所以只需执行以下操作
@FXML
public TextArea log;
谢谢,更改了它,但之后我无法将任何文本附加到TextArea,尝试实现一个方法来获取控制器,但结果是相同的:“NullPointerException”然后TextArea未在fxml中初始化。您可以发布调用fxml和fxml的代码吗感谢您的响应,我找到了解决方案:在方法initialize中的控制器文件上,您返回此值,并将控制器实例保存在主文件的变量中。谢谢,更改了它,但之后我无法将任何文本附加到TextArea,尝试实现一个方法来获取控制器,但结果相同:“NullPointerException”然后,您的fxml中的textarea没有初始化。您可以发布调用您的fxml和fxml的代码吗感谢您的响应,我找到了解决方案:在方法initialize中的控制器文件上,您返回此值,并将控制器的实例保存在主文件中的变量中。