Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查现有文本时的自定义控制台nullPointerException_Java_Swing_Nullpointerexception_Jtextarea - Fatal编程技术网

Java 检查现有文本时的自定义控制台nullPointerException

Java 检查现有文本时的自定义控制台nullPointerException,java,swing,nullpointerexception,jtextarea,Java,Swing,Nullpointerexception,Jtextarea,我已经为一个程序创建了一个自定义控制台。我有一个方法,它向控制台添加一条名为toConsole的消息。这个方法要求输入它检查的字符串,并将时间添加到字符串中。然后它会转到我的函数addConsole,它会检查现有文本是否存在,如果存在,它会将预先存在的文本添加到新文本中,否则它只会将新文本放入。这就是错误。我还可以指出,如果我在控制台输入文本框中手动输入文本,则不会产生此错误 Exception in thread "main" java.lang.NullPointerException

我已经为一个程序创建了一个自定义控制台。我有一个方法,它向控制台添加一条名为toConsole的消息。这个方法要求输入它检查的字符串,并将时间添加到字符串中。然后它会转到我的函数addConsole,它会检查现有文本是否存在,如果存在,它会将预先存在的文本添加到新文本中,否则它只会将新文本放入。这就是错误。我还可以指出,如果我在控制台输入文本框中手动输入文本,则不会产生此错误

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)
下面是addConsole方法

private static void addConsole(String s){
    console.setText( ( console.getText().isEmpty()) ? s : (console.getText() + "\n" + s) );
}
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);
        }
    }
toConsole方法

private static void addConsole(String s){
    console.setText( ( console.getText().isEmpty()) ? s : (console.getText() + "\n" + s) );
}
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);
        }
    }
最后是testerFile类中的主要方法

public static void main(String[] args) {            
        RunConsole.startConsole();
        RunConsole.toConsole("test");
    }
提前感谢您的帮助。我想这是我忽略的一个小错误(我也希望如此)

编辑: 粘贴bin以查看行号

运行控制台类

测试文件类
问题在于
JTextArea
控制台
仍有其默认的
null
值,因为它尚未实例化。这是因为没有创建
RunConsole
的实例-而是以
static
的方式访问此类的方法:

RunConsole.startConsole();
RunConsole.toConsole("test");
使用
静态
方法是糟糕的设计,尤其是因为应用程序需要有状态。在
RunConsole
实例方法中创建所有
static
方法,并将上面的行替换为:

RunConsole runConsole = new RunConsole();
runConsole.startConsole();
runConsole.toConsole("test");
此外,执行此操作时,不要忘记删除在
startConsole
中创建的实例,否则将看不到
toConsole
中的初始消息。更改:

new RunConsole().setVisible(true);


您需要标识RunConsole.java的第188行,以便人们知道异常发生的位置。但是可能在使用“console”之前没有给它一个值。哦,难怪我得到了空指针,但是通过实例化的
RunConsole
我得到了控制台的无错误引导,但是
toConsole(“test”)
一旦引导,就不会在控制台中打印出来。我确实从方法中删除了静态修改器。