Search code examples
javaswingnullpointerexceptionjtextarea

Custom Console nullPointerException when checking for existing text


i have created a custom console for a program. I have a method that adds a message to the console called toConsole this asks for the string where it checks and adds the time to the string. it then goes to my function addConsole which checks if existing text is present if so it will then add the pre-existing text to the new text, else it just puts the new text in. so here is the error. i may also point out that if i enter text manually on the consoles input text box it does not produce this error.

Exception in thread "main" java.lang.NullPointerException
    at com.michael.tech.api.console.RunConsole.addConsole(RunConsole.java:188)
    at com.michael.tech.api.console.RunConsole.toConsole(RunConsole.java:204)
    at com.michael.tech.api.console.RunConsole.toConsole(RunConsole.java:223)
    at com.michael.tech.api.testerFile.main(testerFile.java:25)

here is the addConsole method

private static void addConsole(String s){
    console.setText( ( console.getText().isEmpty()) ? s : (console.getText() + "\n" + s) );
}

the toConsole method

public static void toConsole(String s, boolean timeStamp, boolean classPath, String className){
        if(s.startsWith("/")){
            doCommand(s);
            return;
        }
        Time t = new Time();
        t.getSYSPrint();
        String time = "[" + t.toMilitary() + "] ";
        if(EchoTime || timeStamp){
            addConsole(time + s);
        }
        else if(classPath){
            addConsole(className);
        }
        else{ 
            addConsole(s);
        }
    }

and lastly the Main method in testerFile class

public static void main(String[] args) {            
        RunConsole.startConsole();
        RunConsole.toConsole("test");
    }

Thanks in advance for any help. I assume it is some small mistake i overlooked (I hope too).

EDIT: paste bin to see line numbers

RunConsole class http://pastebin.com/2yUAwQc5

testerFile class http://pastebin.com/R5ViLekp


Solution

  • The problem is that the JTextArea console still has its default null value as it has not been instantiated. This is because there is no instance of RunConsole created — Instead, you are accessing the methods of this class in a static way:

    RunConsole.startConsole();
    RunConsole.toConsole("test");
    

    Using static methods is poor design especially since your application needs to have state. Make all static methods in RunConsole instance methods and replace the above lines with:

    RunConsole runConsole = new RunConsole();
    runConsole.startConsole();
    runConsole.toConsole("test");
    

    Also, when you do this, don't forget to remove your instance created in startConsole, otherwise you will not see the initial message from toConsole. Change:

    new RunConsole().setVisible(true);
    

    to

    setVisible(true);