Java Singleton方法始终为nullpointerexception

时间:2014-01-04 20:07:27

标签: java singleton

我有一个名为HtmlConnect.java的类。 我将变量log声明如下:

public Log log = Log.getInstance();

Log.java文件如下所示:

public class Log {

    private static Log instance = null;
    private String log;

    private Log() {

    }

    public static Log getInstance() {
        if (instance == null) {
            instance = new Log();
        }
        return instance;
    }

    public String getLog() {
        return log;
    }

    public void appendLog(String message) {
        this.log.concat(message+"\n");       
    }


    }

所以当我打电话时

log.appendLog("TestLog");

我总是得到一个nullpointer异常。为什么是taht?

4 个答案:

答案 0 :(得分:7)

您忘记初始化log成员字段。你需要在构造函数中完成它。

答案 1 :(得分:5)

您需要在构造函数中初始化日志变量。

    private Log() {
      log = "";
    }

答案 2 :(得分:1)

内部log.appendLog(“TestLog”);使用String是String并且未初始化。

替换

private String log;

private String log = new String();

答案 3 :(得分:0)

更简单的解决方案就是这样。

public enum Log {;

    private static final StringBuilder LOG = new StringBuilder();

    public static synchronized void append(String message) {
        LOG.append(message).append("\n");       
    }

    public static synchronized String getString() {
        return LOG.toString();
    }

    public static synchronized String getStringAndClear() {
        String s = LOG.toString();
        LOG.setLength(0);
        return s;
    }
}

你可以用

打电话
Log.append("Hello");
Log.append("World");

String lines = Log.getStringAndClear();