Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 我如何从另一个应用程序升级TextArea,使之成为启动GUI的线程?_Multithreading_Javafx_Fxml - Fatal编程技术网

Multithreading 我如何从另一个应用程序升级TextArea,使之成为启动GUI的线程?

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(

我正在设置一个服务器,启动一个带有线程的GUI,我想在其中更新一个TextArea,创建一种日志:当客户端连接或执行某些操作时,但我无法更新GUI。我试过的每一种方法都得到了一个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...");
    } 

}

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中的控制器文件上,您返回此值,并将控制器的实例保存在主文件中的变量中。