簡體   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