2014-02-26 3 views
-2

моя ошибка:Исключение в потоке «главный» java.lang.NullPointerException

Exception in thread "main" java.lang.NullPointerException 
    at ClienteDB.incluir(ClienteDB.java:30) 
    at ClienteInterface.main(ClienteInterface.java:16) 

Я только что проверил некоторые другие вопросы, но не нашел, почему это происходит. Обычно люди говорят, что имеют переменную со значением null. В первый момент переменная будет пустой, но я не выполнял присваивание с нулевым значением.

Строка 30: c [npp] .setCpf (ccpf); Это один из методов моей программы, но единственный, который не работает.

Заранее благодарим за помощь!

import javax.swing.JOptionPane; 

public class ClienteDB 
{ 
Cliente c[]= new Cliente[11]; 

public void incluir() { 
    int flag = 0; 
    String np = JOptionPane 
      .showInputDialog("Entre a posição que você deseja incluir um usuário (1 a 10):"); 
    int npp = Integer.parseInt(np); 
    if (c[npp] != null) { 
     JOptionPane.showMessageDialog(null, 
       "Já possui um cliente neste campo."); 
    } else { 
     String ccpf = JOptionPane.showInputDialog("Qual o cpf do cliente " 
       + npp + "?"); 
     for (int np2 = 1; np2 < 11; np2++) { 
      if ((c[np2] != null) && (c[np2].getCpf().equals(ccpf))) { 
       JOptionPane.showMessageDialog(null, 
         "Existe um usuário com este CPF.\n"); 
       flag = 1; 
       break; 
      } else { 
       c[npp].setCpf(ccpf); 
       break; 
      } 
     } 
     if (flag != 1) { 
      String cnome = JOptionPane 
        .showInputDialog("Qual o nome do cliente " + npp + "?"); 
      c[npp].setNome(cnome); 
      String cend = JOptionPane 
        .showInputDialog("Qual o endereço do cliente " + npp 
          + "?"); 
      c[npp].setEndereco(cend); 
      String ctel = JOptionPane 
        .showInputDialog("Qual o telefone do cliente " + npp 
          + "?"); 
      c[npp].setTelefone(ctel); 
     } 
    } 
} 

То мое главное:

import javax.swing.JOptionPane; 

public class ClienteInterface 
{ 
public static void main (String args[]) 
{ 
    ClienteDB cc = new ClienteDB(); 
    int funcao; 
    do{ 
     String fc=JOptionPane.showInputDialog("Bem vindo!\nQual função você deseja?\n1-Incluir Cliente\n2-Consultar Cliente\n3-Alterar Cliente\n4-Excluir Cliente\n5-Listar clientes\n9-Fim"); 
     funcao=Integer.parseInt(fc); 

    switch (funcao) 
    { 
     case 1: 
     cc.incluir(); 
     break; 

     case 2: 
     cc.consultar(); 
     break; 

     case 3: 
     cc.alterar(); 
     break; 

     case 4: 
     cc.excluir(); 
     break; 

     case 5: 
     cc.listar(); 
     break; 

     case 9: 
     break; 
    }     
    }while (funcao!=9); 
} 

}

+5

Какая линия 30? –

+0

Впереди строки 30 напечатайте значение 'c [npp]'. –

+1

Eclipse или другой отладчик IDE будет намного быстрее, чем мы, для этой проблемы. –

ответ

1

Похоже, вы забыли инициализировать массив. Вы делали

c = new (data_type)[length] 
+0

c - массив, не содержащий список массивов, хотя в противном случае вы правы. – turbo

+0

c is array ..... – Kick

+0

Право, спасибо за уловку – Steve

1

Теперь, когда мы знаем, какой линии это, проблема заключается в этом if

if (c[npp] != null) { // HERE YOU CHECK IT IS NOT NULL 
    JOptionPane.showMessageDialog(null, 
      "Já possui um cliente neste campo."); 
} else { 
// PASS THIS POINT, c[npp] CAN ONLY BE NULL 
    String ccpf = JOptionPane.showInputDialog("Qual o cpf do cliente " 
      + npp + "?"); 
    for (int np2 = 1; np2 < 11; np2++) { 
     if ((c[np2] != null) && (c[np2].getCpf().equals(ccpf))) { 
      JOptionPane.showMessageDialog(null, 
        "Existe um usuário com este CPF.\n"); 
      flag = 1; 
      break; 
     } else { 
      c[npp].setCpf(ccpf); // NULL POINTER... FOR A GOOD REASON 
      break; 
     } 
    } 

Вам необходимо либо изменить, если для

if (c[npp] == null) { 

или вы хотели для записи

c[np2].setCpf(ccpf); 

.

Я знаю, что Eclipse IDE может найти это на лету, если он установлен правильно. Если вы не используете IDE, я настоятельно рекомендую вам начать.

+0

Я не использовал IDE. Сейчас я использую jGRASP для университетского класса. но ваш ответ не решает мою проблему:/я попробую IDE, вероятно. Большое спасибо за помощь! – user3353265

Смежные вопросы