这是部分代码
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的声明和赋值。
不好意思 ,帮不上你的忙 了,想了好久还是想不出