这里我有一些代码,我为JCheckBox创建一个ActionListener。
用户单击JCheckBox后,将触发actionlistener并运行此代码。
首先,我检查他们是选择它还是取消选中复选框,然后将其输入到文本文件中。如果用户取消选择,我会重新输入复选框的文本加0;如果他们正在选择它,则重新输入1。
但是,当我尝试使用循环读取我的文件时,似乎只会导致空值。以下是我正在谈论的内容的摘录。
for (int i = 0; i < notes.length; i++) {
String text;
try {
text = br.readLine();
if (text.contains(s)) {
brw.write(s + "0");
brw.newLine();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
notes.length是一个包含我文件行数的数组。我也尝试将其更改为一个行数行的int。没有变化,仍然没有奏效。如果我打印出“text”和“s”,我会得到复选框的文本值,后跟“null”。文本变量应该有一个值。
我得到一个NullPointerException ..
selected
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at SideNotes$2.actionPerformed(SideNotes.java:86)
顺便说一句..当我在其他地方读取文件时,我没有得到NullPointerException。它返回就好了。
完整代码:
File file = new File("notes.txt");
if (file.exists()) {
try {
FileInputStream fs = new FileInputStream(file);
final BufferedReader br = new BufferedReader(
new InputStreamReader(fs));
final BufferedReader reader = new BufferedReader(
new FileReader("notes.txt"));
FileWriter writer = new FileWriter(file, true);
final BufferedWriter brw = new BufferedWriter(writer);
while (reader.readLine() != null)
lines++;
// reader.close();
notes = new JCheckBox[lines];
ActionListener al = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JCheckBox checkbox = (JCheckBox) e.getSource();
if (checkbox.isSelected()) {
System.out.println("selected");
String s = checkbox.getText();
for (int i = 0; i < notes.length; i++) {
String text;
try {
text = br.readLine();
if (text.contains(s)) {
brw.write(s + "0");
brw.newLine();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
} else {
System.out.println("deselected");
String s = checkbox.getText();
for (int i = 0; i < notes.length; i++) {
String text;
try {
text = br.readLine();
if (text.contains(s)) {
brw.write(s + "0");
brw.newLine();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
};
为什么我得到一个空结果,我该如何修复它?
答案 0 :(得分:0)
我认为这应该是:
String s = checkBox.getText().toString();
因此您可以将文本的值设置为String。