繁体   English   中英

将JTextArea中的文本读入StringBuilder

[英]Read text in JTextArea into 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();

    }
}

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

StringBuilder s = new StringBuilder();

您是否真的要等到用户单击JButton才构建此StringBuilder的内容? StringBuilders通常用作具有局部范围的按需帮助对象。


需要注意的一些事情:

  • 使用static成员变量被认为是不良设计
  • 类名以大写字母开头
  • 不要使用绝对定位( null布局)。 改用布局管理器
  • 首选方法是直接创建并使用JFrame的实例。
  • ActionListeners的首选方法是使用匿名实例或Action接口。
  • 考虑使用初始线程

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

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

s = new StringBuilder();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM