2013-06-19 4 views
2

По какой-то причине я получаю исключение NullPointerException при проверке длины строки в выражении «if». Вероятно, я ошибаюсь, но я бы не знал. То, что код, который я пытаюсь записать, в основном просто изменяет метку кнопки, но только если строка 'label1' имеет длину 0 символов (или не установлена), так что ее можно изменить только один раз.Проверка длины строки возвращает NullPointerException?

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

     public class Class1 { 

public static String label1; 


public static String one = ("Hello"); 
public static String two = ("Goodbye"); 

public static void main(String args[]) { 

    JFrame frame = new JFrame(); 
    JPanel pane = new JPanel(); 
    JButton button = new JButton(); 


    button.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      try { 
      if(label1.length() == 0) { 

       label1 = one; 
       JButton button = (JButton) e.getSource(); 
       button.setText(label1); 
      } 
      if(label1.length() < 0) { 

       label1 = two; 
       JButton button = (JButton) e.getSource(); 
       button.setText(label1); 
      } 
     } catch(Exception ex) { 
       System.out.println("ERROR"); 
       ex.printStackTrace(); 
      } 

     }  
    }); 

    frame.setSize(350, 350); 
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    frame.add(pane); 
    pane.add(button); 


    } 

} 
+0

Вы никогда не инициализировали строку 'label1'. –

+0

инициализируйте свою метку1 перед ее использованием. Public static String label1 = null; –

ответ

7
public static String label1; 

использовать линию if(label1.length() == 0) { вы должны инициализировать lable1 перед тем

Вы не intialised Lable! нигде использовать его

Попробуйте изменить эту строку

public static String label=""; 

или добавить дополнительное условие Null

if(label1 != null && label1.length() == 0) { 
+0

Спасибо! Я думал, что String будет помечена как содержащая 0 символов, если она не была инициализирована, но я думаю, что нет. –

+0

@NoneNone Рад помочь вам. Пожалуйста, отметьте это как ответ (зеленый тик под стрелкой для голосования), если вы сочтете полезным. –

0

Назначают некоторое строковое значение для label

public static String label1 = new String("someString"); 

Мы получаем NullPointerException при вызове некоторый метод по ссылке на объект, который не имеет пэка n назначил какой-либо объект еще и ссылку, подтверждающую значение null

0

label1 является нулевым, потому что вы его не инициализировали.

label1 = "";

должен решить вашу проблему (это будет не нулевой размер 0)

0

В вашем примере, объект String «label1» не инициализируется и NULL. Это означает, что если вы попытаетесь вызвать метод для несуществующего объекта, должен произойти NullPointerException.

Чтобы проверить, есть ли назначенный объект, попробуйте if (label1 != null).

Чтобы присвоить значение, выполните label1 = "my String" - это инициализирует объект String.

0

Всегда проверяйте null. Например:

if(label != null && label.length() > 0) {...} 

из интереса, когда это (label1.length() < 0) всегда верно?

+0

Это неправда, мне еще предстоит закончить запись всей программы. –

+0

Довольно. Я заинтригован, как возникла необходимость. – SK9