0

テキスト領域のすべての行を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();

    }
}
4

2 に答える 2

2

インスタンス化されていないオブジェクトでメソッドを呼び出そうとすると、が発生しますNPE。あなたはあなたのをインスタンス化する必要がありますStringBuilder s

StringBuilder s = new StringBuilder();

ユーザーがクリックするまで待ってから、JButtonこのコンテンツを作成しStringBuilderますか?StringBuilders通常、ローカルスコープを持つオンデマンドヘルパーオブジェクトとして使用されます。


注意すべき点がいくつかあります。

  • staticメンバー変数の使用は、不十分な設計と見なされます
  • クラス名は大文字で始まります
  • null絶対測位(レイアウト)は使用しないでください。代わりにレイアウトマネージャーを使用してください
  • 推奨されるアプローチは、JFrame直接&使用のインスタンスを作成することです。
  • の推奨されるアプローチActionListenersは、匿名インスタンスまたはアクションインターフェイスのいずれかを使用することです。
  • 初期スレッドの使用を検討してください
于 2013-02-09T11:29:03.053 に答える
1

StringBuilderに書き込みたい場合は、StringBuilderはまだnullです。

追加する前に、StringBuilderをインスタンス化する必要があります。

s = new StringBuilder();

StringBuilderとJScrollPaneの変数名は同じですが、異なる名前を使用する必要があります。

于 2013-02-09T11:31:06.073 に答える