elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  SetText JavaFX no funciona
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: SetText JavaFX no funciona  (Leído 2,165 veces)
carlosuc99

Desconectado Desconectado

Mensajes: 42


Ver Perfil
SetText JavaFX no funciona
« en: 26 Marzo 2014, 21:54 pm »

Buenas,

Tengo cuatro archivos, en un proyecto de JavaFX FXML. El problema es que quiero hacer un settext pero me dice que la variable del TextField es null. El código es el siguiente.

FXMLDocumentController:

Código:
public class FXMLDocumentController implements Initializable {
   
        @FXML
        private TextField carlos;
        RXTX main = new RXTX();
       
        @FXML
    private void handleButtonAction(ActionEvent event) {
       
    }
       
   
   
        @Override
        public void initialize(URL url, ResourceBundle rb) {
    main.initialize();
    Thread t = new Thread() {
                public void run() {
                   
                    //the following line will keep this app alive for 1000 seconds,
                    //waiting for events to occur and responding to them (printing incoming messages to console).
                    try {Thread.sleep(1000000);} catch (InterruptedException ie) {}
                }
            };
    t.start();
    System.out.println("Started");
        }   
       
}

El RXTX, donde se ejecuta el settext(está al final) y donde funciona el thread anterior:

Código:
public class RXTX implements SerialPortEventListener{

    @FXML private TextField carlos;
   
    private String Temperature;
   
        SerialPort serialPort;
        /** The port we're normally going to use. */
private static final String PORT_NAMES[] = {
"COM5" // Windows
};
/**
* A BufferedReader which will be fed by a InputStreamReader
* converting the bytes into characters
* making the displayed results codepage independent
*/
private BufferedReader input;
/** The output stream to the port */
private OutputStream output;
/** Milliseconds to block while waiting for port open */
private static final int TIME_OUT = 2000;
/** Default bits per second for COM port. */
private static final int DATA_RATE = 57600;

public void initialize() {
CommPortIdentifier portId = null;
Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();

//First, Find an instance of serial port as set in PORT_NAMES.
while (portEnum.hasMoreElements()) {
CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
for (String portName : PORT_NAMES) {
if (currPortId.getName().equals(portName)) {
portId = currPortId;
break;
}
}
}
if (portId == null) {
System.out.println("Could not find COM port.");
return;
}

try {
// open serial port, and use class name for the appName.
serialPort = (SerialPort) portId.open(this.getClass().getName(),
TIME_OUT);

// set port parameters
serialPort.setSerialPortParams(DATA_RATE,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);

// open the streams
input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
output = serialPort.getOutputStream();

// add event listeners
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
} catch (Exception e) {
System.err.println(e.toString());
}
}

/**
* This should be called when you stop using the port.
* This will prevent port locking on platforms like Linux.
*/
public synchronized void close() {
if (serialPort != null) {
serialPort.removeEventListener();
serialPort.close();
}
}

/**
* Handle an event on the serial port. Read the data and print it.
*/
public synchronized void serialEvent(SerialPortEvent oEvent) {
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
String inputLine=input.readLine();
System.out.println(inputLine);
                                GetData(inputLine);
} catch (Exception e) {
System.err.println(e.toString());
}
}
// Ignore all the other eventTypes, but you should consider the other ones.
}

        @FXML
private void GetData(String Data) {
           
            if(Data.contains("Temperature")){
                carlos.setText("Test");   
            }
           
        }
}

Y aquí tienes el principal archivo java:

Código:
public class OPilot extends Application {
   
    @Override
    public void start(Stage stage) throws Exception {
     
               
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
       
        Scene scene = new Scene(root);
       
        stage.setScene(scene);
        stage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
   
}



En línea

Mitsu

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: SetText JavaFX no funciona
« Respuesta #1 en: 26 Marzo 2014, 22:18 pm »

Los Controladores en JavaFX son exclusivos para una sola clase. Es decir, cuando le indicas qué clase quieres que sea el controlador:

Código
  1. fx:controller="paquete.clase"

Estás diciendo que esa clase contralará tu GUI. La clase RXTX contiene un TextField marcado como control FXML pero si te das cuenta está declarado en dicha clase, por lo que el TextField del controller y este TextField son distintos, acá no hay referencia. Por eso te da el NullPointerException, como ese TextField no corresponde a ningún controller, no se ha inicializado y por lo tanto vale null.

Puedes pasárselo por referencia a la clase RXTX por un constructor para que dicha clase haga uso del TextField, o por medio de un setter.

Código
  1. public class RXTX implements SerialPortEventListener{
  2.  
  3.   private TextField carlos;
  4.  
  5.  public RXTX(TextField carlos) { this.carlos = carlos; }


Salu2.


« Última modificación: 26 Marzo 2014, 22:23 pm por Mitsu » En línea

carlosuc99

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Re: SetText JavaFX no funciona
« Respuesta #2 en: 27 Marzo 2014, 09:50 am »

Gracias, perfecto!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con JLabel con setBackground y setText
Java
d!lan 2 2,233 Último mensaje 30 Septiembre 2013, 21:38 pm
por Debci
Problema setText()
Java
.:UND3R:. 4 2,912 Último mensaje 17 Octubre 2013, 19:58 pm
por Mitsu
[JavaFX] Manual para aprender JavaFX
Java
jaxoR 1 10,527 Último mensaje 17 Noviembre 2013, 20:16 pm
por Mitsu
[JavaEE - JavaFx] RESTful con JPA (CRUD) y cliente en JavaFX
Java
Usuario Invitado 2 4,188 Último mensaje 10 Abril 2015, 22:43 pm
por Usuario Invitado
for en setText de jlabel
Java
soy_nicanor 4 2,334 Último mensaje 31 Agosto 2015, 08:27 am
por exploiterstack
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines