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:
Código:
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");
}
});
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)
Código:
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
Editado, en la clase de RentaInterna, no inicializaba el objeto cCliente, mi jefe lo deshabilito para poder hacer pruebas... pero ya está corregido , jamas me dijo...