Java 将JTextArea中的文本读入StringBuilder
我尝试将文本区域中的所有行读取到StringBuilder中,以便将文本区域中的文本用作整个字符串。然而,我在s.append(line)行中得到了NullPointerException。为什么?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
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通常用作具有本地范围的按需辅助对象
有几件事需要注意:
- 使用
成员变量被视为设计不良静态
- 类名以大写字母开头
- 不要使用绝对定位(
layout)。改用null
- 首选方法是直接创建
的实例并使用JFrame
的首选方法是使用匿名实例或接口ActionListeners
- 考虑使用
NPE
。您需要实例化您的StringBuilder
s
:
StringBuilder s = new StringBuilder();
在构建此StringBuilder
的内容之前,是否确实要等待用户单击JButton
<代码>StringBuilders通常用作具有本地范围的按需辅助对象
有几件事需要注意:
- 使用
成员变量被视为设计不良静态
- 类名以大写字母开头
- 不要使用绝对定位(
layout)。改用null
- 首选方法是直接创建
的实例并使用JFrame
的首选方法是使用匿名实例或接口ActionListeners
- 考虑使用
s = new StringBuilder();
顺便说一句,您的StringBuilder和JScrollPane具有相同的变量名,您应该使用不同的名称。您的StringBuilder在写入时仍然为空 在追加之前,需要实例化StringBuilder
s = new StringBuilder();
顺便说一句,StringBuilder和JScrollPane具有相同的变量名,您应该使用不同的名称