
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


Editado, en la clase de RentaInterna, no inicializaba el objeto cCliente, mi jefe lo deshabilito para poder hacer pruebas... pero ya está corregido
