Buenas, tengo un problema que me parece muy facil pero no se porque no lo puedo reparar:
Código Javascript
:
Ver originalWorkbook w = Workbook.getWorkbook(new File ("Questions.xls"));
Sheet s = w.getSheet(0);
BufferedWriter bw = new BufferedWriter(new FileWriter("Reporte_Cuestionario.txt"));
for (int itP=1; itP<=InPreg; itP++) {
opcM = "";
int r=1;
String choiceA = h3+s.getCell(r,itP).getContents()+_h3,
choiceB = h3+s.getCell(r+1,itP).getContents()+_h3,
choiceC = h3+s.getCell(r+2,itP).getContents()+_h3;
Object[] choices = {choiceA, choiceB, choiceC};
opcChoice = JOptionPane.showOptionDialog(null,
h1+itP+". "+s.getCell(0,itP).getContents()+_h1,
" ",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
choices,
choiceA);
if (opcChoice == 0) { chD = "A"; }
else if (opcChoice == 1) { chD = "B"; }
else if (opcChoice == 2) { chD = "C"; }
if (chD.equalsIgnoreCase("A")) {
opcA_= 1;
if ((s.getCell(s.getColumns()-1,itP).getContents()).equals("A")) {
SpregC += "#"+itP+" ";
CI = "CORRECTO";
ac_++;
_ReportFinal(s,itP,opcA_,opcA_,CI);
} else {
SpregE += "#"+itP+" ";
CI = "INCORRECTO";
er_++;
_RespCorrect(s,itP,_R,opcA_,CI);
}
} else if ...//Y hay otros 2 IFS para B y C igual al de A
//DESPUES.....
private void _ReportFinal(Sheet s, int itP, int RespC, int RespABC, String CI) {
_Foutput += itP+": "+s.getCell(0,itP).getContents()+
"\r\n Respuesta Correcta: "+s.getCell(s.getColumns()-1,itP).getContents()+
") "+s.getCell(RespC,itP).getContents()+"\r\n Su Respuesta: "+opcP.toUpperCase()+
") "+s.getCell(RespABC,itP).getContents()+"\r\n "+CI+"\r\n\r\n";
System.out.print("ENTRO A REPORTE");
}
Les comento:
Se ejecuta primero una ventana donde pide cuantas preguntas quiere en el cuestionario, después esta ventana:
Aqui elije una opcion donde cada boton tiene valor de
0, 1, 2 respectivamente, eso lo vemos en esta parte del código, y cuando presiona algun boton la variable String
chD toma los valores de
A, B ó C, eso esta en esta parte del código:
Código Javascript
:
Ver originalObject[] choices = {choiceA, choiceB, choiceC};
opcChoice = JOptionPane.showOptionDialog(null,
h1+itP+". "+s.getCell(0,itP).getContents()+_h1,
" ",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
choices,
choiceA);
if (opcChoice == 0) { chD = "A"; }
else if (opcChoice == 1) { chD = "B"; }
else if (opcChoice == 2) { chD = "C"; }
Después de que se presiono y chD tomo un valor empiezan las comparaciones en el código que sigue después del bloque de arriba, entonces si Presiono la primer opcionn que esta en rojo, será un 0 y chD valdrá A, ahi entra al if y si ven cuando empieza a hacer las operaciones correspondientes, llama a la clase
_ReportFinal(s,itP,opcA_,opcA_,CI); y se lleva los valores de Sheet, la iteracion del for, el valor de opcA al entrar al if y un String CI..
Código Javascript
:
Ver originalif (chD.equalsIgnoreCase("A")) {
opcA_= 1;
if ((s.getCell(s.getColumns()-1,itP).getContents()).equals("A")) {
SpregC += "#"+itP+" ";
CI = "CORRECTO";
ac_++;
_ReportFinal(s,itP,opcA_,opcA_,CI)
Entonces cuando entra a _ReportFinal y empieza con la primer instrucción, ahi esta el error segun el compilador.
Línea de error:
_Foutput += itP+": "+s.getCell(0,itP).getContents()+
Error en el compilador:
Exception in thread "main" java.lang.NullPointerException
at ExcelQuestionB._ReportFinal(ExcelQuestionB.java:16 7)
at ExcelQuestionB._Principal(ExcelQuestionB.java:109)
at ExcelQuestionB._InPreg(ExcelQuestionB.java:61)
at ExcelQuestionB.main(ExcelQuestionB.java:231)
No entiendo porque da ese error :S, ya le puse un try-catch y asi continua con la siguiente pregunta pero se salta esa parte donde da el error para generar el reporte final.
Saludos !!!