麻烦大家帮我看看我这个空指针异常错在哪里呢?Java

这是部分代码
else if(e.getActionCommand().equals("查找")){
wb=wby.getText();
System.out.print(wb);//这里打印的是我在文本域中输入的文字
new Way(1);//这是一个对话框,里面有“开始”这个按钮
}else if(e.getActionCommand().equals("开始")||e.getActionCommand().equals("下一个")){
System.out.print(wb);//这里的wb却为null,报错,出现空指针问题。把wb=wby.getText();放进来也同样
String temp=wbk.getText();
int s=wb.indexOf(temp,start);//这行出现空指针,因为wb为null。
if(wb.indexOf(temp,start)!=-1){
wby.setSelectionStart(s);
wby.setSelectionEnd(s+temp.length());
wby.setSelectedTextColor(Color.GREEN);
start=s+1;
an10.setText("下一个");
//value=value.substring(s+temp.length());//不能截取字串
}else {
JOptionPane.showMessageDialog(this, "查找完毕!", "提示", 0);
this.dispose();
}
我想问的是,“开始”里的wb为什么会是null?我很不解,怎么样把”查找“里的的wb放进”开始“里呢?

我写了一个测试的样例,你看下。可以在文本域中写入文本进行查找。启动后,在输入框中填入要查找的内容,然后点击开始按钮。

/**
 * 
 */

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.GridBagLayout;
import javax.swing.JLabel;
import java.awt.GridBagConstraints;
import javax.swing.JTextField;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

/**
 * @author jiaoqishun 2015-6-5 下午4:25:44
 */
public class FindText extends JFrame {
    private JTextField txt_Search;

    public FindText() {

        JPanel panel = new JPanel();
        getContentPane().add(panel, BorderLayout.CENTER);
        GridBagLayout gbl_panel = new GridBagLayout();
        gbl_panel.columnWidths = new int[] { 0, 0, 0, 0 };
        gbl_panel.rowHeights = new int[] { 0, 0, 0 };
        gbl_panel.columnWeights = new double[] { 1.0, 1.0, 0.0,
                Double.MIN_VALUE };
        gbl_panel.rowWeights = new double[] { 0.0, 1.0, Double.MIN_VALUE };
        panel.setLayout(gbl_panel);

        JLabel lbl_Search = new JLabel(
                "\u8F93\u5165\u8981\u67E5\u627E\u7684\u5185\u5BB9\uFF1A");
        GridBagConstraints gbc_lbl_Search = new GridBagConstraints();
        gbc_lbl_Search.insets = new Insets(0, 0, 5, 5);
        gbc_lbl_Search.anchor = GridBagConstraints.EAST;
        gbc_lbl_Search.gridx = 0;
        gbc_lbl_Search.gridy = 0;
        panel.add(lbl_Search, gbc_lbl_Search);

        txt_Search = new JTextField();
        GridBagConstraints gbc_txt_Search = new GridBagConstraints();
        gbc_txt_Search.insets = new Insets(0, 0, 5, 5);
        gbc_txt_Search.fill = GridBagConstraints.HORIZONTAL;
        gbc_txt_Search.gridx = 1;
        gbc_txt_Search.gridy = 0;
        panel.add(txt_Search, gbc_txt_Search);
        txt_Search.setColumns(10);

        JButton btn_Search = new JButton("\u5F00\u59CB");
        GridBagConstraints gbc_btn_Search = new GridBagConstraints();
        gbc_btn_Search.insets = new Insets(0, 0, 5, 0);
        gbc_btn_Search.gridx = 2;
        gbc_btn_Search.gridy = 0;
        panel.add(btn_Search, gbc_btn_Search);

        final JTextArea textArea = new JTextArea();
        GridBagConstraints gbc_textArea = new GridBagConstraints();
        gbc_textArea.gridwidth = 3;
        gbc_textArea.insets = new Insets(0, 0, 0, 5);
        gbc_textArea.fill = GridBagConstraints.BOTH;
        gbc_textArea.gridx = 0;
        gbc_textArea.gridy = 1;
        panel.add(textArea, gbc_textArea);

        setTextAreaContent(textArea);

        btn_Search.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                String findStr = txt_Search.getText();
                if ("".equals(findStr)) {
                    JOptionPane.showMessageDialog(null, "查找文本为空,请重新输入。");
                    return;
                } else {
                    findText(findStr, textArea);
                }
            }
        });

    }

    /**
     * @param findStr
     * @param textArea
     */
    protected void findText(String findStr, JTextArea textArea) {
        String textAreaText = textArea.getText();
        if (textAreaText == null || "".equals(textAreaText)) {
            JOptionPane.showMessageDialog(null, "文本域内容为空,请重新输入。");
            return;
        } else {
            int fromIndex = 0;
            int count = 0;
            int index = textAreaText.indexOf(findStr, fromIndex);
            while(index>=0){
                count++;
                index = textAreaText.indexOf(findStr, index+1);
            }
            if (count > 0) {
                JOptionPane.showMessageDialog(null, "查找成功,共找到"+count+"处。");
            }else{
                JOptionPane.showMessageDialog(null, "文本域中不存在该词汇。");
            }
        }
    }

    /**
     * 设置JTextArea中的内容
     */
    private void setTextAreaContent(JTextArea textArea) {
        textArea.setText("白日依山尽,\r\n黄河入海流;\r\n欲穷千里目,\r\n更上一层楼");
    }

    public static void main(String[] args) {
        FindText findText = new FindText();
        findText.setTitle("查找文本样例");
        findText.setSize(300, 300);
        findText.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        findText.setLocationRelativeTo(null);
        findText.setVisible(true);
    }
}

我没找到。倒是想给楼主建议,xx.getXX().equals("xx")这种写法容易出空指针,尽量用常量去equals(变量)

wb只在if条件中赋值了,没有在else中赋值,所以为空

你wb都 没赋值 不 null 还能是 什么 我一般都 初始值 都设置 ""空字符串串

代码太有限了,不好说是哪里出了问题。
你没有给出wb声明到目前出错的代码,不好确定为什么你的wb是空的,但可以推测一下,wb声明的时候就是null,然后根据某个condition进入到抛出空指针异常的条件语句中,显然在这之中你么有给wb赋值,从而出现了这个问题,建议楼主还是好好检查下里面的逻辑吧。

String temp=wbk.getText();你开始的里面写的是wbk,是不是写错了,应该是wby啊?如果wby.getText()还是null的话,就要去跟下wby的声明和赋值。

不好意思 ,帮不上你的忙 了,想了好久还是想不出