Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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
JavaFx的Jframe_Java_Javafx_Javafx 2_Javafx 8 - Fatal编程技术网

JavaFx的Jframe

JavaFx的Jframe,java,javafx,javafx-2,javafx-8,Java,Javafx,Javafx 2,Javafx 8,我需要从public void run()在ChatAppClienteMod中发送var Msj 至ChatAppClientController中的私有void SendMsj(KeyEvent事件) 但我有一个错误: 错误:无法从静态上下文引用非静态方法MensajeRecibido(字符串) Chatappclientcontroller.MensajeRecibido(Msj) 有什么想法吗 ChatAppClienteMod package chatappcliente;

我需要从
public void run()
ChatAppClienteMod中发送
var Msj
至ChatAppClientController中的私有void SendMsj(KeyEvent事件) 但我有一个错误:

错误:无法从静态上下文引用非静态方法MensajeRecibido(字符串) Chatappclientcontroller.MensajeRecibido(Msj)

有什么想法吗

ChatAppClienteMod

 package chatappcliente;

    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.net.Socket;
    import javafx.stage.Stage;
public class ChatAppClienteMod extends Thread{
    private int port;
    private String url;
    private boolean bConect;
    private Socket s;

    public ChatAppClienteMod(int port, String url){
        this.port = port;
        this.url = url;
    }

    public void run(){
        try {
            System.out.println(port + url);
            s = new Socket(url,port);
            DataInputStream Entrada = new DataInputStream(s.getInputStream());
            System.out.println("Conect sucess");
            bConect = true;
            while(bConect){
                String Msj = Entrada.readUTF();
                ChatAppClienteController.MensajeRecibido(Msj);
            }
        } catch (NumberFormatException | IOException e) {
            System.out.println("Error");
        }
    }
    public void SendMsj(String Msj){
        try {
            DataOutputStream Salida = new DataOutputStream(s.getOutputStream());
            Salida.writeUTF(Msj);
        } catch (Exception e) {
            System.out.println("No se pudo enviar el mensaje");
        }
    }
}
ChatAppClientController

package chatappcliente;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.*;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
public class ChatAppClienteController implements Initializable {

    /**
     * Initializes the controller class.
     */
    @FXML private TextField tfPuerto;
    @FXML private TextField tfUrl;
    @FXML private TextField tfNick;
    @FXML private TextField tfMsj;
    @FXML private TextArea taUsers;
    @FXML private TextArea taMens;
    @FXML private ChatAppClienteMod ClienteHilo = null;

    @FXML private void Conectar (ActionEvent evt){
        System.out.println("Ok");
        taUsers.setText("Ok");
        int port = Integer.parseInt(tfPuerto.getText());
        String url = tfUrl.getText();
        if(ClienteHilo == null){
            ClienteHilo = new ChatAppClienteMod(port,url);
            ClienteHilo.start();
        }
    }
    @FXML  public void MensajeRecibido (String Msj){
        taMens.setText("hELLLOOOO");
        taMens.appendText(Msj + "\n");

    }  
    @FXML private void SendMsj(KeyEvent event){
        System.out.println(event.getCode());
        if(event.getCode()== KeyCode.ENTER){
            ClienteHilo.SendMsj(tfMsj.getText());
            tfMsj.setText("");
        }
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    

}
请参阅以了解出现错误的原因。您需要为
ChatAppClienteMod
提供对由
fxmloader
加载的控制器实例的引用。您还需要用于对控制器实例的调用,因为控制器方法正在修改活动场景图,且调用点当前不在JavaFX应用程序线程中。