Java 将JTextArea中的文本读入StringBuilder

Java 将JTextArea中的文本读入StringBuilder,java,swing,jtextarea,stringbuilder,Java,Swing,Jtextarea,Stringbuilder,我尝试将文本区域中的所有行读取到StringBuilder中,以便将文本区域中的文本用作整个字符串。然而,我在s.append(line)行中得到了NullPointerException。为什么? public class tu extends JFrame implements ActionListener{ JTextArea t; static StringBuilder s; tu (){ setLayout(/*new BorderLay

我尝试将文本区域中的所有行读取到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();

    }
}

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

StringBuilder s = new StringBuilder();
在构建此
StringBuilder
的内容之前,是否确实要等待用户单击
JButton
<代码>StringBuilders通常用作具有本地范围的按需辅助对象


有几件事需要注意:

  • 使用
    静态
    成员变量被视为设计不良
  • 类名以大写字母开头
  • 不要使用绝对定位(
    null
    layout)。改用
  • 首选方法是直接创建
    JFrame
    的实例并使用
  • ActionListeners
    的首选方法是使用匿名实例或接口
  • 考虑使用

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

StringBuilder s = new StringBuilder();
在构建此
StringBuilder
的内容之前,是否确实要等待用户单击
JButton
<代码>StringBuilders通常用作具有本地范围的按需辅助对象


有几件事需要注意:

  • 使用
    静态
    成员变量被视为设计不良
  • 类名以大写字母开头
  • 不要使用绝对定位(
    null
    layout)。改用
  • 首选方法是直接创建
    JFrame
    的实例并使用
  • ActionListeners
    的首选方法是使用匿名实例或接口
  • 考虑使用

当您要写入StringBuilder时,它仍然为空

在追加之前,需要实例化StringBuilder

s = new StringBuilder();

顺便说一句,您的StringBuilder和JScrollPane具有相同的变量名,您应该使用不同的名称。

您的StringBuilder在写入时仍然为空

在追加之前,需要实例化StringBuilder

s = new StringBuilder();
顺便说一句,StringBuilder和JScrollPane具有相同的变量名,您应该使用不同的名称