java codeformatter抛出NullPointerEception

时间:2014-11-17 20:48:26

标签: java eclipse eclipse-jdt

我有一个java代码来编程另一个java代码。 代码对于简单的java代码工作正常。但是当我在输入java代码中引入commnent(作为字符串代码输入)时,在下面的行中textEdit返回null,这将在后续步骤中导致nullpointerexception。

TextEdit textEdit = codeFormatter.format(CodeFormatter.K_UNKNOWN , code, 0, code.length(), 0, null);


import org.eclipse.jdt.core.ToolFactory;
import org.eclipse.jdt.core.formatter.CodeFormatter;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.text.edits.MalformedTreeException;
import org.eclipse.text.edits.TextEdit;

public class FormatCode {

    public static void main(String[] args) {
        String code = "public class TestFormatter{public static void main(String[] args){for(i=0;i<10;i++){i=i+2;\\abc"+"}System.out.println(\"Hello World\");}}";
        CodeFormatter codeFormatter = ToolFactory.createCodeFormatter(null);

        TextEdit textEdit = codeFormatter.format(CodeFormatter.K_UNKNOWN , code, 0, code.length(), 0, null);
        IDocument doc = new Document(code);
        try {
            textEdit.apply(doc);
            System.out.println(doc.get());
        } catch (MalformedTreeException e) {
            e.printStackTrace();
        } catch (BadLocationException e) {
            e.printStackTrace();
        }
    }
}

任何解决此问题的提示。

3 个答案:

答案 0 :(得分:1)

在新行中使用评论。 //评论正在一行中使用,因此您的代码就是这样。

换句话说,要解决此问题,请改为创建/*条评论。

答案 1 :(得分:1)

此部分{i=i+2;\\abc"应为{i=i+2;//abc\n"您需要使用//进行评论而不是\还要在评论后创建换行符,否则其余代码将位于同一行并且评论说。

答案 2 :(得分:0)

基本上,您从null获得codeFormatter.format,因为正如文档所说:

  

如果无法格式化给定字符串,则返回null。

由于您的程序无法正确解析(由于注释问题),因此也无法格式化。如果有可能处理的文本不正确且可格式化,您应该从null检查返回的format()