读取每行中特定字符数的文本文件

时间:2014-01-17 13:37:30

标签: java text-files netbeans-7 jtextfield

我正在尝试从文本文件中读取文本,我已经可以使用system.out.print在系统上打印它。但是,如果我从文本文件中读取的文本中设置JTextArea的文本,则会显示“线程中的异常”主“java.lang.NullPointerException”。它实际上在打印行中运行良好,我已经可以阅读我想要的内容但是,我不能将此文本放在JTextArea上。我该怎么办?

这是我的代码:

 package mdiforms;
    import java.io.BufferedReader;
    import java.io.FileReader;

    public class FR 
    {
    public static void main (String[] args) throws Exception
    {
            String path  = ("C:/Users/Pasusani/Desktop/try.txt");
    FileReader file = new FileReader(path);
        BufferedReader reader = new BufferedReader(file);

    String text = "";
    String line = reader.readLine();
    while (line !=null)
    {
        text += line;
        line = reader.readLine();
               String setText = line.substring(0,1);
             txtLine.setText(setText); 
    }
    System.out.println(text);

    }       

}

2 个答案:

答案 0 :(得分:0)

您的JTextArea txtLine对象未初始化,请尝试使用txtLine = new javax.swing.JTextArea();

答案 1 :(得分:0)

将输出流重定向到jTextArea并设置输出流,如下所示:

    ....
    {
    OutputStream out1 = new OutputStream() {
        @Override
        public void write(final int b) throws IOException {
            updateTextPane(String.valueOf((char) b));
        }

        @Override
        public void write(byte[] b, int off, int len) throws IOException {
            updateTextPane(new String(b, off, len));
        }

        @Override
        public void write(byte[] b) throws IOException {
            write(b, 0, b.length);
        }
    };

    System.setOut(new PrintStream(out1, true));
  }
  ....

  private void updateTextPane(final String text) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            Document doc = jTextArea.getDocument();
            try {
                doc.insertString(doc.getLength(), text, null);
            } catch (BadLocationException e) {
                throw new RuntimeException(e);
            }
        }
    });
 }

现在使用System.out.println(text);它会将文本打印到jTextArea而不是在控制台上。