Java读取文本文件产生空结果

时间:2013-11-17 02:42:45

标签: java file nullpointerexception jcheckbox

这里我有一些代码,我为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();
                            }
                        }

                    }
                }
            };

为什么我得到一个空结果,我该如何修复它?

1 个答案:

答案 0 :(得分:0)

我认为这应该是:

String s = checkBox.getText().toString();

因此您可以将文本的值设置为String。