对于小说阅读器种读取的问题

问题是对于读取的时候,读取出来的字符串一直是null


package book;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.RandomAccessFile;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;


public class BookReader {
    public static String str="";
    private static int num=0;
    public static void main(String[] args) throws Exception {
    // //框架
        JFrame frame=new JFrame("小说阅读");
        frame.setBounds(100, 100, 500, 600);
        frame.setVisible(true);
        frame.setLayout(new BorderLayout());
    //小说界面
        JTextArea body=new JTextArea("默认为第0回,点击下一回开始阅读");
        body.setSize(500, 100);
        frame.add(body);
        body.setBackground(Color.yellow);
    //按钮以及下方文字
        Panel pan2=new Panel(new GridLayout(2,1));
        Panel pan1=new Panel(new FlowLayout());
        JButton next=new JButton("下一章");
        JButton last=new JButton("上一章");
        JButton color=new JButton("深色");
        JButton defalut=new JButton("默认");
        JButton exist=new JButton("退出");
        pan1.add(color);
        pan1.add(defalut);
        pan1.add(last);
        pan1.add(next);
        pan1.add(exist);
        pan2.add(pan1);
        JTextArea pan3=new JTextArea("");
        pan3.setBackground(new Color(172, 203, 213));
        pan3.setText("阅读小说,荡涤心灵");
        pan2.add(pan3);
    //组合
        frame.add(body,BorderLayout.CENTER);
        frame.add(pan2,BorderLayout.AFTER_LAST_LINE);
    //深色按钮监听
        color.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent arg0) {
            if(body.getBackground()==Color.yellow) {
                body.setBackground(Color.orange);
            }
            else if(body.getBackground()==Color.orange) {
                body.setBackground(Color.red);
            }
            else if(body.getBackground()==Color.red) {
                body.setBackground(Color.LIGHT_GRAY);
            }
            else if(body.getBackground()==Color.LIGHT_GRAY) {
                body.setBackground(Color.gray);
            }
                
            }
        });
        //默认按钮的监听
        defalut.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                if(body.getBackground()==Color.yellow) {
                    body.setBackground(Color.yellow);
                }
                else if(body.getBackground()==Color.orange) {
                    body.setBackground(Color.yellow);
                }
                else if(body.getBackground()==Color.red) {
                    body.setBackground(Color.yellow);
                }
                else if(body.getBackground()==Color.LIGHT_GRAY) {
                    body.setBackground(Color.yellow);
                }
                else if(body.getBackground()==Color.gray) {
                    body.setBackground(Color.yellow);
                }
                    
                }
        });
        //对于小说的读取
        //下一章
        next.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    RandomAccessFile reader=new RandomAccessFile("三国演义.txt","rw");
                    str=reader.readLine();
                    while(reader.readLine()!=null) {
                        if(reader.readLine().startsWith(" 第00"+num)) {
                        str+=reader.readLine();}
                        if(reader.readLine().startsWith(" 第00"+(num+1))){
                            num=num+1;
                            break;
                        }
                    }
                    body.setText(str);
                    str="";
                    reader.close();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }    
            }
        });
        
        //上一章
        last.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    BufferedReader reader=new BufferedReader(new FileReader("三国演义.txt"));
                    str=reader.readLine();
                    while(reader.readLine()!=null) {
                        if(reader.readLine().startsWith(" 第00"+(num-1))) {
                        str+=reader.readLine();}
                        if(reader.readLine().startsWith(" 第00"+num)){
                            num=num-1;
                            break;
                        }
                        body.setText(str);
                        str="";
                        reader.close();
                    }
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
        });
        //退出按钮的监听
        exist.addActionListener(new ActionListener() {
            
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        
        
}}

其中小说格式前10章开头都是 空格+第00X章
但是我不知道为啥读取到的字符串str全是null
此外我还有个问题。对于num我想对他进行修改,定义成static肯定是没法修改的,有没有其他办法?
谢谢!