2 k358971707 k358971707 于 2015.06.04 20:06 提问

麻烦大家帮我看看我这个空指针异常错在哪里呢?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放进”开始“里呢?

7个回答

tongyi55555
tongyi55555   2015.06.05 16:40
已采纳

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

/**
 * 
 */

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);
    }
}

k358971707
k358971707 我已经解决了,但是还是非常感谢你。
2 年多之前 回复
ycrxun
ycrxun   2015.06.04 20:29

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

k358971707
k358971707 我就想赋值给它一个这个wb=wby.getText(),放在“查找”里打印是我在文本域里输入的文字,但是把这个放在“开始”里wby.getText()却为null,这是为什么呢?
2 年多之前 回复
bdmh
bdmh   Ds   Rxr 2015.06.04 20:39

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

k358971707
k358971707 我就想赋值给它一个这个wb=wby.getText(),放在“查找”里打印是我在文本域里输入的文字,但是把这个放在“开始”里wby.getText()却为null,这是为什么呢?
2 年多之前 回复
n1229154556
n1229154556   2015.06.04 21:03

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

k358971707
k358971707 我就想赋值给它一个这个wb=wby.getText(),放在“查找”里打印是我在文本域里输入的文字,但是把这个放在“开始”里wby.getText()却为null,这是为什么呢?
2 年多之前 回复
tongyi55555
tongyi55555   2015.06.04 22:09

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

k358971707
k358971707 我就想赋值给它一个这个wb=wby.getText(),放在“查找”里打印是我在文本域里输入的文字,但是把这个放在“开始”里wby.getText()却为null,这是为什么呢?
2 年多之前 回复
tongyi55555
tongyi55555   2015.06.05 07:22

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

k358971707
k358971707 这就是一记事本里查找的功能,wbk是文本框的意思,就是输入要查找的字,wby就是文本域的意思,wby.getText()就是我在文本域里输入的字符,如果这个获取不了文本域里的字符,这个功能就实现不了,我不是单纯想解决这个报错,还想实现这个功能,就是实在想不通“查找”里的wby.getText()是我在文本域里输入的内容,可是当我将wb=wby.getText();放进去“开始”里就为null了?就想知道还有什么方法是我不会用的,还求帮忙解决一下啊
2 年多之前 回复
qq_28763887
qq_28763887   2015.06.05 11:59

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

k358971707
k358971707 同样谢谢你。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片