Título: [Solucionado] java.lang.NullPointerException por qué?
Publicado por: Nakatsukasa Itero en 9 Mayo 2012, 21:32 pm
hola, ya de seguro me kieren retirar de la programacion en java pero todavia no.... ;D reulta que tengo un formulario X (para llenar una renta de un juego); tengo un bonton que valida que los datos de la renta (cliente, juegos y controles) están correctos, en la parte que llama a una ventana externa (el mismo boton) me tira un NullPointerException, aqui está el boton que llama a la ventana externa para aceptar la renta: btnRealizarRenta.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent t) { System.out.println("1----------"); if(elCliente==null || aListJuegos==null){ System.out.println("2"); int opcion = JOptionPane.showOptionDialog(null, "No se ha encontrado cliente o juego para la renta\nPor favor realiza la busqueda correspondiente para poder realizar la renta", "Espera", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null); System.out.println("3"); System.out.println("opcion "+opcion); } else{ System.out.println("4"); //RentaInterna ri=new RentaInterna(elCliente,ctr,aListJuegos,"EXTERNA"); try{ System.out.println("5"); RentaInterna ri=new RentaInterna(elCliente,ctr,aListJuegos,"EXTERNA"); System.out.println("6"); //RentaInterna ri=new RentaInterna(ctr,"EXTERNA"); Stage st = new Stage(); System.out.println("7"); Group rentafx = new Group(); System.out.println("8"); st.setScene(new Scene(rentafx, 715, 535)); System.out.println("9"); ri.start(st); System.out.println("10"); //btnRealizarRenta.setDisable(true); } catch(Exception ex){ System.out.println("11"); System.out.println("-- "+ex.toString()); System.out.println("12"); } aListJuegos=null; System.out.println("13"); } //deshabilitaTodo();//para asegurarse de los estados de las cosas t.consume(); System.out.println("14"); } });
los sout´s (System.out.println() los uso para hacer debbug y ver donde esta el problema) me llegan hasta el numero 9, despues de ahi, no pasa al 10 y se muestran el 11 y el 12 (la parte del catch()) aqui está TODO el codigo de la clase renta interna (verán que tengo rentas externas e internas por los distintos costructores e if´s que están puestos) package javafxejemplo1; import java.util.ArrayList; import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.event.EventHandler; import javafx.event.EventType; import javafx.scene.Scene; import javafx.scene.input.MouseEvent; import javafx.scene.input.ScrollEvent; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; import javafx.stage.WindowEvent; import javax.swing.JOptionPane;
public class RentaInterna extends Application{ //setDefaultCloseOperation(0); DatosRenta renta; DatosRentaExterna rentaE; Controlador cnt; Scene sc; MarcoRentaPane mrp; Tarifa tarifa; Modulo modulo; //--- Renta renta_e; private String edicion="false"; //--- double disponible; double ultimaScaleX; double ultimaScaleY; double nuevaSceneX; double nuevaSceneY; double ultimaSceneX; double ultimaSceneY; double nuevaScaleX; double nuevaScaleY; int diferenciaX; int diferenciaY; final static int WIDTH=715; final static int HEIGHT=535; private double initX; private double initY; double nueva=1.0; //--- Cliente cCliente; Controlador cControlador; ArrayList<Juegos> juegos; String Tipo; //--- RentaInterna(){} RentaInterna(MarcoRentaPane mrp){ this.mrp=mrp; } RentaInterna(MarcoRentaPane mrp, Tarifa tarifa){ this.mrp=mrp; this.tarifa=tarifa; } RentaInterna(MarcoRentaPane mrp, Tarifa tarifa, Modulo modulo){ this.mrp=mrp; this.tarifa=tarifa; this.modulo=modulo; } RentaInterna(MarcoRentaPane mrp, Tarifa tarifa, Modulo modulo, Controlador ctr){ //setDefaultCloseOperation(0); this.mrp=mrp; this.cnt=ctr; this.tarifa=tarifa; this.modulo=modulo; } RentaInterna(MarcoRentaPane mrp, Tarifa tarifa, Modulo modulo, Controlador ctr, double disponible){ //setDefaultCloseOperation(0); this.disponible=disponible; this.mrp=mrp; this.cnt=ctr; this.tarifa=tarifa; this.modulo=modulo; } RentaInterna(MarcoRentaPane mrp,Controlador ctr,String edicion, double disponible){ this.mrp=mrp; this.cnt=ctr; this.edicion=edicion; this.disponible=disponible; } RentaInterna(Cliente cCliente,Controlador cControlador,ArrayList<Juegos> juegos,String edicion){ //RentaInterna(Controlador cControlador,String edicion){ //this.cCliente=cCliente;//este problemita me hacia toda la vida imposible, resulta que en realidad laguien (mi jefe) lo comentó para hacer pruebas y se le olvifó decirme :rolleyes: this.cControlador=cControlador; //this.juegos=juegos; this.edicion=edicion; System.out.println("todo bien hasta aqui"); } RentaInterna(Cliente cliente,Controlador cControlador,String edicion){ //RentaInterna(Controlador cControlador,String edicion){ this.cCliente=cliente; this.cControlador=cControlador; //this.juegos=juegos; this.edicion="EXTERNA"; System.out.println("todo bien hasta aqui"); } public static void main(String[] args) { launch(args); } @Override public void start(final Stage primaryStage) { // cnt=new Controlador(); //primaryStage.getOnCloseRequest(); if("false".equalsIgnoreCase(edicion)){ renta = new DatosRenta(cnt,mrp,primaryStage,tarifa,modulo,disponible); } else if("EXTERNA".equalsIgnoreCase(edicion)){ rentaE = new DatosRentaExterna(cControlador,primaryStage,cCliente,juegos); //this.ctr=ctr; //renta = new DatosRenta(primaryStage,cControlador,edicion); } else{ //System.out.println("Edicion no es false"); renta = new DatosRenta(cnt,mrp,primaryStage,true,disponible); } final BorderPane root = new BorderPane(); if("EXTERNA".equalsIgnoreCase(edicion)){ root.setCenter(rentaE); } else{ root.setCenter(renta); } root.setPrefWidth(WIDTH);//+15 root.setPrefHeight(HEIGHT);//+15 Scene Escena=new Scene(root); try{ primaryStage.setScene(Escena); primaryStage.show(); } catch(Exception ex){ System.out.println("que px: "); } ultimaScaleX=1; ultimaScaleY=1; primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>(){//toma el evento de cierre y que haga lo que estan en el handle @Override public void handle(WindowEvent arg0) { arg0.consume(); /*if("false".equals(edicion)){ int opcion = JOptionPane.showOptionDialog(null, "¿Estás seguro que deseas cancelar la renta?", "Alto", JOptionPane.ERROR_MESSAGE, JOptionPane.WARNING_MESSAGE, null, null, null); if(opcion==0){//si //primaryStage.show(); //System.out.println("no jala"); } else{} mrp.destruir(); } else if("EXTERNA".equalsIgnoreCase(edicion)){} else{ //ctr.cancelarRenta(mrp.getRent().getTicket(), mrp.getRent().getCliente(), mrp.getRent().getJuegos(),mrp.getRent().getIdModulo(),"INTERNA", mrp.getRent().getControles(), Utilerias.obtenerFechaCorta()+" "+mrp.getRent().getInicio()+":00", Utilerias.obtenerFechaCorta()+" "+mrp.getRent().getExpira()+":00", mrp.getRent().getTotal(), mrp.getRent().getPromosion(),mrp.getRent().getIdEmpleado()); cnt.cancelarRenta(mrp.getRent().getTicket(), mrp.getRent().getCliente(), mrp.getRent().getJuegos(),mrp.getRent().getIdModulo(),"INTERNA", mrp.getRent().getControles(), Utilerias.obtenerFechaCorta()+" "+mrp.getRent().getInicio()+":00", Utilerias.obtenerFechaCorta()+" "+mrp.getRent().getExpira()+":00", mrp.getRent().getTotal(), mrp.getRent().getPromosion(),mrp.getRent().getIdEmpleado()); mrp.destruir(); }*/ } }); primaryStage.widthProperty().addListener(new ChangeListener<Number>() { @Override public void changed(ObservableValue<? extends Number> observableValue, Number oldSceneWidth, Number newSceneWidth) { nuevaSceneX=(double)newSceneWidth; nuevaScaleX=(nuevaSceneX/WIDTH); root.setScaleX(nuevaScaleX-0.050500); if(ultimaSceneX>nuevaSceneX){ root.setTranslateX(1.0); } ultimaScaleX=nuevaScaleX; root.setLayoutX(0); root.setLayoutY(0); } }); primaryStage.heightProperty().addListener(new ChangeListener<Number>() { @Override public void changed(ObservableValue<? extends Number> observableValue, Number oldSceneHeight, Number newSceneHeight) { nuevaSceneY=(double)newSceneHeight; nuevaScaleY=(nuevaSceneY/HEIGHT); root.setScaleY(nuevaScaleY-0.050500); if(ultimaSceneY>nuevaSceneY){ root.setTranslateY(1.0); } ultimaScaleY=nuevaScaleY; root.setLayoutX(0); root.setLayoutY(0); } }); root.setOnMousePressed(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent me) { initX = me.getScreenX() - primaryStage.getX(); initY = me.getScreenY() - primaryStage.getY(); } }); //when screen is dragged, translate it accordingly root.setOnMouseDragged(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent me) { primaryStage.setX(me.getScreenX() - initX); primaryStage.setY(me.getScreenY() - initY); } }); root.setOnScroll(new EventHandler<ScrollEvent>(){ @Override public void handle(ScrollEvent arg0) { nueva=(arg0.getDeltaY()/403); //if((primaryStage.getWidth()>=174.3) || (primaryStage.getHeight()>=145.2)){ root.setScaleX(nueva); primaryStage.setWidth((nueva)*WIDTH); // System.out.println("primary Stage Width "+primaryStage.getWidth()); root.setScaleY(nueva); primaryStage.setHeight((nueva)*HEIGHT); // System.out.println("Height "+primaryStage.getHeight()); //root.setLayoutX(0); //root.setLayoutY(0); //} } }); } }
pero en el primer bloque code, como les digo me lanza la excepcion despues del sout 9 (ri.start(st)) y y ade ahí no sé cual sea el problema, la parde de DatosRentaExterna es igual a otras clases que tengo y que funcionana si problema o complicacion alguna. agradezco vuestra ayuda desde CH :¬¬ MX >:D Editado, en la clase de RentaInterna, no inicializaba el objeto cCliente, mi jefe lo deshabilito para poder hacer pruebas... pero ya está corregido :rolleyes:, jamas me dijo...
|