Problemas - Exception - JList

4 respostas
G

Pessoal, boa noite…
Estou com um problema de exception nesse pedaço da minha classe… e jah tentei de tudo pra resolver e nao encontro o problema…
Sei que o sistema executa até a parte do código abaixo que estah com o comentario “Até aqui”…

A mensagem de retorno lah da Exception é “4” (isso mesmo)… o que nao me facilita mto as buscar no google…
O erro seguinte eh esseo:
Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException: null

Alguém pode me dar uma força?

Desde jah agradeço!

@SuppressWarnings("null")
	public String[] verificaPeriodo(){
		Connection conn = null;
		Statement stmt = null;
		// String nome [] = null;
		// String horaInicio [] = null;
		// String duracao [] = null;
		String diaSemana = "SELECT TO_CHAR(SYSDATE,'DY') DIASEMANA FROM DUAL";
		String diaSemanaField = null;
		String diaSemanaFieldQuery = null;
		//String comandoSQL = "SELECT PERIODO_ID, NOME, TO_CHAR(HORAINICIO,'HH:MI:SS') HRINI, TO_CHAR(DURACAO,'HH:MI:SS') DUR " +
			//				"FROM PERIODO WHERE " + diaSemanaFieldQuery + " = 'S'";
		
		try{
			conn = DBConn.getInstance().getConnection();
    		try {
    			stmt = conn.createStatement();
    			ResultSet rs = stmt.executeQuery(diaSemana);
    			System.out.println("Entrou");
    			rs.next();
    			diaSemanaField = rs.getString("DIASEMANA");
    			rs.close();
			} catch (SQLException exc1) {
				DBConn.getInstance().shutdown();
				System.err.println("1) Erro na consulta: " + exc1.getMessage());
				return null;
			} catch (Exception exc2) {
				DBConn.getInstance().shutdown();
				System.err.println("1) Erro inesperado na consulta: " + exc2.getMessage());
				return null;				
			}
    		try {
    			if (diaSemanaField.equals("DOM")){
    				diaSemanaFieldQuery = "DOMINGO";
    			} else if (diaSemanaField.equals("SEG")){
    				diaSemanaFieldQuery = "SEGUNDA";
    			} else if (diaSemanaField.equals("TER")){
    				diaSemanaFieldQuery = "TERCA";
    			} else if (diaSemanaField.equals("QUA")){
    				diaSemanaFieldQuery = "QUARTA";
    			} else if (diaSemanaField.equals("QUI")){
    				diaSemanaFieldQuery = "QUINTA";
    			} else if (diaSemanaField.equals("SEX")){
    				diaSemanaFieldQuery = "SEXTA";
    			} else if (diaSemanaField.equals("SAB")){
    				diaSemanaFieldQuery = "SABADO"; }
    			stmt = conn.createStatement();
    			String comandoSQL = "SELECT PERIODO_ID, NOME, TO_CHAR(HORAINICIO,'HH:MI:SS') HRINI, TO_CHAR(DURACAO,'HH:MI:SS') DUR " +
									"FROM PERIODO WHERE " + diaSemanaFieldQuery + " = 'S'";
    			System.out.println("comandoSQL: " + comandoSQL);
    			System.out.println("diaSemanaField: " + diaSemanaField);
    			ResultSet rs = stmt.executeQuery(comandoSQL);
    			ResultSetMetaData rsmd = rs.getMetaData();
    			int numCols = rsmd.getColumnCount();
    			Integer idPeriodo [] = new Integer[numCols];
    			System.out.println("Cols: " + numCols);
    			while (rs.next()) {
    				for (int i=0; i<=numCols; i++){
    					idPeriodo [i] = rs.getInt("PERIODO_ID");
    					System.out.println("i: " + i + " id: " + idPeriodo[i]); // <<<<<<<<<<<<<<<<<<<-----------------------------------------------------------------ATÉ AQUI
        				// nome [i] = rs.getString("NOME");
        				// horaInicio [i] = rs.getString("HRINI");
        				// duracao [i] = rs.getString("DUR");
    				}
    			}
    			rs.close();
    			System.out.println("retornoPeriodo: antes ");
    			String[] retornoPeriodo = null;
    			System.out.println("retornoPeriodo: depois " + retornoPeriodo);
    			for (int j=0; j<=numCols; j++){
    				System.out.println("j entrou " + j);
    				retornoPeriodo[j] =  idPeriodo[j].toString(); 
    				System.out.println("j!");
   					//retornoPeriodo[j] = nome[j] + " / " + horaInicio[j] + " / " + duracao [j];
    			}
    			DBConn.getInstance().shutdown();
    			return retornoPeriodo;
			} catch (SQLException exc1) {
				DBConn.getInstance().shutdown();
				System.err.println("2) Erro na consulta: " + exc1.getMessage());
				return null;
			} catch (Exception exc2) {
				DBConn.getInstance().shutdown();
				System.err.println("2) Erro inesperado na consulta: " + exc2.getMessage());
				return null;				
			}
		} catch (Exception exc) {
			DBConn.getInstance().shutdown();
			System.err.println("Erro na conexao: " + exc.getMessage());
			return null;
		}
    }

4 Respostas

G

A propósito…
Estou retornando esse array para uma Jlist, através do código abaixo…

lstPeriodo.setModel(new javax.swing.AbstractListModel() {
        	String[] periodo = verificaPeriodo();
            public int getSize() { return periodo.length; }
            public Object getElementAt(int i) { return periodo[i]; }
        });
muriloazs

Olá GuiSobreira, pela Exceção apresentada, o erro está na hora de transformar algum dado para um número.

Poste a linha que acontece o erro, fica mais fácil identificar.

E também notei algo que pode vir a te dar problemas, segue o trecho do código:

System.out.println("retornoPeriodo: antes "); String[] retornoPeriodo = null; System.out.println("retornoPeriodo: depois " + retornoPeriodo); for (int j=0; j<=numCols; j++){ System.out.println("j entrou " + j); retornoPeriodo[j] = idPeriodo[j].toString(); System.out.println("j!"); //retornoPeriodo[j] = nome[j] + " / " + horaInicio[j] + " / " + duracao [j]; }

retornoPeriodo é nulo, logo você não poderá percorrê-lo usando o laço, ocasionando assim uma “NullPointerException”.

Abraço!

G

Bom dia muriloazs,

Que valor devo colocar na variável retornaPeríodo para que ela seja inicializada?
Esse erro “NullPointerException” tb já ocorreu no meu programa…

Então… aparentemente meu programa roda até a linha 65 (do código postado), e depois cai na Exception…

Tks,

muriloazs

Dê uma olhada nesse trecho de código:

for (int i=0; i<=numCols; i++){ idPeriodo [i] = rs.getInt("PERIODO_ID"); System.out.println("i: " + i + " id: " + idPeriodo[i]); // <<<<<<<<<<<<<<<<<<<-----------------------------------------------------------------ATÉ AQUI // nome [i] = rs.getString("NOME"); // horaInicio [i] = rs.getString("HRINI"); // duracao [i] = rs.getString("DUR"); }

Ainda não sei se é esse o erro, mas pense comigo:

Eu tenho um array com as seguintes posições:
{0, 1, 2, 3}

Eles tem 4 elementos, correto?

Se voce fizer um laço para ler seus itens, voce irá fazer dessa maneira, onde numCols irá valer 4(número de elementos do array) e você deverá ir até o índice 3.

Quando você usa o operador <= ele irá percorrer até o indice 4, gerando um ArrayOutBoundsException.

Então o correto seria:

for(int i=0; i<numCols;i++){ // }

Tente debugar e ver em que momento acontece esse erro e nos traga mais informações :wink:

Criado 16 de maio de 2010
Ultima resposta 18 de mai. de 2010
Respostas 4
Participantes 2