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应用程序线程中。