将JTextArea中的文本读入StringBuilder

时间:2013-02-09 11:27:21

标签: java swing jtextarea stringbuilder

我尝试将文本区域中的所有行读入StringBuilder,以便我可以将文本区域中的文本用作整个字符串。但是我在行 s.append(line); 中得到了NullPointerException。为什么呢?

public class tu extends JFrame implements ActionListener{

    JTextArea t;
    static StringBuilder s;

    tu (){

        setLayout(/*new BorderLayout()*/null);
        t=new JTextArea(30,77);
        JScrollPane s=new JScrollPane(t,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        JButton b=new JButton("process");
        b.addActionListener(this);
        JPanel p=new JPanel();
        JPanel p1=new JPanel();
        p.add(s);
        p.setBorder(new TitledBorder("sequence"));
        p.setBounds(0,0,880,540);
        p1.add(b);
        p1.setBounds(380,570,100,40);
        add(p);
        add(p1);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(900,700);
        setVisible(true);

    }
     public void actionPerformed(ActionEvent e){
         String text=t.getText();
         while (text!=null){for (String line : text.split("\\n")){ 
         s.append(line);
         }}

     }


    public static void main(String[] args){
        tu t=new tu();

    }
}

2 个答案:

答案 0 :(得分:2)

尝试在尚未实例化的对象上调用任何方法将导致NPE。您需要实例化StringBuilder s

StringBuilder s = new StringBuilder();

在构建此JButton的内容之前,您是否真的要等到用户点击StringBuilder之后? StringBuilders通常用作具有本地范围的按需帮助程序对象。


需要注意的一些事项:

  • 使用static成员变量被视为设计不佳
  • 班级名称以大写字母开头
  • 不要使用绝对定位(null布局)。使用layout manager代替
  • 首选方法是直接创建JFrame的实例。使用。
  • ActionListeners的首选方法是使用匿名实例或Action接口。
  • 考虑使用initial threads

答案 1 :(得分:1)

当你想写入它时,你的StringBuilder仍为null。

你需要在追加之前实例化你的StringBuilder。

s = new StringBuilder();

btw你的StringBuilder和你的JScrollPane有相同的变量名,你应该使用不同的名字。