2

I'm getting a really annoying error, saying I'm getting a null pointer exception but there's an if statement to check to see if the text is null before proceeding:

    public String[] getFileData() throws IOException
{
    String file_name = "C:/Users/Liloka/Source/textfiles/Lines.txt";

    try {
        ReadFile file = new ReadFile(file_name);
        aryLines = file.OpenFile();

        for(int i =0; i<aryLines.length; i++)
        {
            System.out.println(aryLines[i]);
        }
    }

    catch(IOException e)
    {   
        System.out.println(e.getMessage());
    }
    return aryLines;
}

public void actionPerformed(ActionEvent evt)
{
    if(evt.getSource() == enterBtn)
    {
        String Text = textToAdd.getText();
        if(!(Text.equals(null)))
        {
            RF.addNewElement(Text);
            System.out.println(Text);

            try
            {
                RF.writeToFile();
                getFileData();
            }
        catch(Exception e)
            {

            }
        }
        else    JOptionPane.showMessageDialog(null, "Please enter a word!");
    }

}

The only time it even considered the 'else' was through this:

    if(Text.equals(null));

I've also tried doing:

   if(Text != null));

which has worked for me in the past but not now! Other classes are:

public String[] OpenFile() throws IOException
{
    FileReader fr = new FileReader(path);
    BufferedReader br = new BufferedReader(fr);

    int numberOfLines = readLines();
    textData = new String[numberOfLines];
    int i;
        for(i=0; i<numberOfLines; i++)
        {
                textData[i] = br.readLine();
        }

    br.close();
    return textData;
}

int readLines() throws IOException
{
    FileReader file_to_read = new FileReader(path);
    BufferedReader bf = new BufferedReader(file_to_read);

    String aLine;
    numberOfLines=0;

    while((aLine = bf.readLine()) != null)
    {
        numberOfLines++;
    }
    //numberOfLines++;
    bf.close();
    return numberOfLines;
}

public void addNewElement(String newElement)
{   
    String texticles = newElement;
    numberOfLines = numberOfLines++;
    textData[numberOfLines] = texticles;
    //numberOfLines++; //Increments numberOfLines for the next element to be added
}

public void writeToFile() throws IOException
{
    FileWriter fstream = new FileWriter(path);
    BufferedWriter outFile = new BufferedWriter(fstream);
    //numberOfLines++;

        outFile.write(textData[numberOfLines]);
        //outFile.write(",");

        outFile.write("\r\n");

    outFile.close();
}

Thank you, again!

Error:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at textfiles.JListExample.actionPerformed(JListExample.java:115)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

I get the error when I've typed or not typed something and pressed the enter button.

This is the error for

if(Text != null)

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at textfiles.JListExample.actionPerformed(JListExample.java:115)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
12
  • In what like do you get the exception? Maybe it's not related to the Text variable... Commented Sep 13, 2011 at 17:25
  • two things. Text should start with a lower case. Then you are invoking an equal method on the String object. If the string is null, you will get a Null pointer exception. If(text != null ) should work, unless if you have some logical mistake. I believe you could have a double negation. if(!(text != null)) or some other simple error like that. Commented Sep 13, 2011 at 17:29
  • 1
    And what is at line: at textfiles.JListExample.actionPerformed(JListExample.java:115) Commented Sep 13, 2011 at 17:34
  • 1
    Which line is 115? My guess is that RF is not initialized. Commented Sep 13, 2011 at 17:37
  • 1
    a different variable is null. Answer John B's question to find out which. The key is to look carefully at the error message as it's not a meaningless bunch of garbage, but usually contains the information that would allow you to solve this yourself. Commented Sep 13, 2011 at 17:38

2 Answers 2

16
 if(Text.equals(null));

The above will throw a NullPointerException each time Text is null. Anytime you use the "." operator on null you get a NullPointerException.

If you are getting a NPE after if(Text != null), please post the stack trace.

Sign up to request clarification or add additional context in comments.

10 Comments

+1. Very good point. Also, the comparison of Text.equals(null) is kind of pointless, since it will either throw the NPE or return false. The comparison of null == Text should instead be used. Also, as a style guideline, variables in Java should be lower case.
don't you wish there were an Objects.equal(a, b) that handles null correctly?
There is, Guava's Objects.equal(a,b). [link](docs.guava-libraries.googlecode.com/git-history/v9.0/javadoc/…, java.lang.Object))
@Peter, I just tried the different ways of comparing Strings as I was told in college you can't compare two strings like this: String a == String b;
@liloka: Per String a == String b. It is true that you should never do this for two Strings but it is appropriate when comparing against null. null is not a String it is a blank reference and where you compare it against a String you are checking to see if the String is also a blank reference.
|
0

My guess is either textToAdd or RF is null.

If textToAdd is a JTextComponent (or subclass, but I'm guessing here), then its getText() method CANNOT return null. Therefore, Text CANNOT be null, as this test shows.

package test;

import javax.swing.JFrame;
import javax.swing.JTextField;

public class TextComponentTest extends JFrame {
    JTextField tf;

    public TextComponentTest() {
        super();
        tf = new JTextField();
        getContentPane().add(tf);
    }

    public static void main(String[] args) {
        TextComponentTest test = new TextComponentTest();
        test.setVisible(true);

        String s = test.tf.getText();
        System.out.println(">" + s + "<");
        System.out.println(">" + s.length() + "<");

        test.tf.setText(null);
        s = test.tf.getText();
        System.out.println(">" + s + "<");
        System.out.println(">" + s.length() + "<");
    }
}

Output is:

><
>0<
><
>0<

3 Comments

textToAdd is a JTextField.. (I know I need to work on my variable names but I'm just practising atm! - before I get told off) In my previous programs it has worked and considering the line it's throwing a wobbly on in 115 and that's the line for RF.addNewElement(); it's that..
So that means RF is null.
Excellent! Glad my logic was sound - not glad that your app isn't working yet!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.