【菜鸟求助】例子程序出现java.lang.NullPointerException问题

小懒虫爱贪玩 2015-05-04 05:03:48
本人Java初学者,前不久在看《Java2实用教程(第三版)》(耿祥义)这本教材,照着9.4节-事件处理-例9_8编译了简易计算器小程序,定义了4个Java类,结果运行结果总是出错,后来去掉try catch块后就显示java.lang.NullPointerException错误了,可是我对过几遍了,和书本上的代码好像一模一样啊,纠结。。。。
不多说,上代码:

//Ex9_8.java
public class Ex9_8 {

public static void main(String[] args) {
// TODO Auto-generated method stub
WindowOperation win=new WindowOperation();
win.setBounds(100,100,390,360);
win.setTitle("简单计算器");
}
}



//ComputerListener.java
import java.awt.event.*;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.io.*;

public class ComputerListener implements ActionListener {

JTextField inputNumberOne, inputNumberTwo;
JTextArea textShow;
String fuhao;

public void setJTextFieldOne(JTextField t) {

inputNumberOne = t;
}

public void setJTextFieldTwo(JTextField t) {

inputNumberTwo = t;
}

public void setJTextArea(JTextArea area) {
textShow = area;
}

public void setFuhao(String s) {
fuhao = s;
}

public void actionPerformed(ActionEvent e) {
// try {

double number1 = Double.parseDouble(inputNumberOne.getText());
double number2 = Double.parseDouble(inputNumberTwo.getText());
System.out.println(number1);
System.out.println(number1);

double result = 0;
if (fuhao.equals("+")) {
result = number1 + number2;
} else if (fuhao.equals("-")) {
result = number1 - number2;
} else if (fuhao.equals("*")) {
result=number1*number2;
}else if (fuhao.equals("/")) {
result=number1/number2;
}
textShow.append(number1+" "+fuhao+" "+number2+" "+result+"\n");

// } catch (Exception exp) {
// // TODO: handle exception
// textShow.append("\n 请输入数字字符"+exp.toString());
// }
}
}



//OperatorListener.java
import java.awt.event.*;
import javax.swing.*;
public class OperatorListener implements ItemListener {
JComboBox choice;
ComputerListener workTogether;
public void setJComboBox(JComboBox box) {
choice=box;
}
public void setWorkTogether(ComputerListener computer) {
workTogether=computer;
}

public void itemStateChanged(ItemEvent e) {
// TODO Auto-generated method stub
String fuhao=choice.getSelectedItem().toString();
workTogether.setFuhao(fuhao);
}
}


//WindowOperation .java
import java.awt.*;
import java.io.*;
import javax.swing.*;

public class WindowOperation extends JFrame{
JTextField inputNumberOne,inputNumberTwo;
JComboBox choiceFuhao;
JTextArea textShow;
JButton button;
OperatorListener operator;
ComputerListener computer;
public WindowOperation() {
// TODO Auto-generated constructor stub
init();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void init(){
setLayout(new FlowLayout());
inputNumberOne=new JTextField(5);
inputNumberTwo=new JTextField(5);
choiceFuhao=new JComboBox();
button=new JButton("计算");
choiceFuhao.addItem("选择运算符号:");
String []a={"+","-","*","/"};
for (int i = 0; i < a.length; i++) {
choiceFuhao.addItem(a[i]);
}
textShow=new JTextArea(9,30);
operator=new OperatorListener();
computer=new ComputerListener();
operator.setJComboBox(choiceFuhao);
operator.setWorkTogether(computer);
computer.setJTextFieldOne(inputNumberOne);
computer.setJTextFieldOne(inputNumberTwo);
computer.setJTextArea(textShow);
choiceFuhao.addItemListener(operator);
button.addActionListener(computer);
add(inputNumberOne);
add(inputNumberOne);
add(choiceFuhao);
add(inputNumberTwo);
add(button);
add(new JScrollPane(textShow));
}
}
...全文
460 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
等待时候 2015-05-05
  • 打赏
  • 举报
回复
引用 8 楼 abcde0221 的回复:
[quote=引用 3 楼 u011376884 的回复:] 错误代码发出来 不然怎么定位……
double number2 = Double.parseDouble(inputNumberTwo.getText());这一句显示异常[/quote] debug 看一下吧!一步一步找寻
丶顛簸人生 2015-05-05
  • 打赏
  • 举报
回复
引用 6 楼 abcde0221 的回复:
[quote=引用 5 楼 hz_huazhang 的回复:] [quote=引用 楼主 abcde0221 的回复:] 本人Java初学者,前不久在看《Java2实用教程(第三版)》(耿祥义)这本教材,照着9.4节-事件处理-例9_8编译了简易计算器小程序,定义了4个Java类,结果运行结果总是出错,后来去掉try catch块后就显示java.lang.NullPointerException错误了,可是我对过几遍了,和书本上的代码好像一模一样啊,纠结。。。。 不多说,上代码:

//Ex9_8.java
public class Ex9_8 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		WindowOperation win=new WindowOperation();
		win.setBounds(100,100,390,360);
		win.setTitle("简单计算器");
	}
}

//ComputerListener.java
import java.awt.event.*;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.io.*;

public class ComputerListener implements ActionListener {

	JTextField inputNumberOne, inputNumberTwo;
	JTextArea textShow;
	String fuhao;

	public void setJTextFieldOne(JTextField t) {
		
		inputNumberOne = t;
	}

	public void setJTextFieldTwo(JTextField t) {
		
		inputNumberTwo = t;
	}

	public void setJTextArea(JTextArea area) {
		textShow = area;
	}

	public void setFuhao(String s) {
		fuhao = s;
	}

	public void actionPerformed(ActionEvent e) {
//		try {
			
			double number1 = Double.parseDouble(inputNumberOne.getText());
			double number2 = Double.parseDouble(inputNumberTwo.getText());
			System.out.println(number1);
			System.out.println(number1);

			double result = 0;
			if (fuhao.equals("+")) {
				result = number1 + number2;
			} else if (fuhao.equals("-")) {
				result = number1 - number2;
			} else if (fuhao.equals("*")) {
				result=number1*number2;
			}else if (fuhao.equals("/")) {
				result=number1/number2;
			}
			textShow.append(number1+" "+fuhao+" "+number2+" "+result+"\n");		

//		} catch (Exception exp) {
//			// TODO: handle exception
//			textShow.append("\n 请输入数字字符"+exp.toString());
//		}
	}
}

//OperatorListener.java
import java.awt.event.*;
import javax.swing.*;
public class OperatorListener implements ItemListener {
	JComboBox choice;
	ComputerListener workTogether;
	public void setJComboBox(JComboBox box) {
		choice=box;
	}
	public void setWorkTogether(ComputerListener computer) {
		workTogether=computer;
	}
	
	public void itemStateChanged(ItemEvent e) {
		// TODO Auto-generated method stub
		String fuhao=choice.getSelectedItem().toString();
		workTogether.setFuhao(fuhao);
	}
}

//WindowOperation .java
import java.awt.*;
import java.io.*; 
import javax.swing.*;

public class WindowOperation extends JFrame{
	JTextField inputNumberOne,inputNumberTwo;
	JComboBox choiceFuhao;
	JTextArea textShow;
	JButton button;
	OperatorListener operator;
	ComputerListener computer;
	public WindowOperation() {
		// TODO Auto-generated constructor stub
		init();
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	void init(){
		setLayout(new FlowLayout());
		inputNumberOne=new JTextField(5);
		inputNumberTwo=new JTextField(5);
		choiceFuhao=new JComboBox();
		button=new JButton("计算");
		choiceFuhao.addItem("选择运算符号:");
		String []a={"+","-","*","/"};
		for (int i = 0; i < a.length; i++) {
			choiceFuhao.addItem(a[i]);
		}
		textShow=new JTextArea(9,30);
		operator=new OperatorListener();
		computer=new ComputerListener();
		operator.setJComboBox(choiceFuhao);
		operator.setWorkTogether(computer);



		computer.setJTextFieldOne(inputNumberOne);  
		computer.setJTextFieldOne(inputNumberTwo);    --你这赋值是不是有问题啊?应该是computer.setJTextFieldTwo(inputNumberTwo)  原因你自己捉摸吧!!!




		computer.setJTextArea(textShow);
		choiceFuhao.addItemListener(operator);
		button.addActionListener(computer);
		add(inputNumberOne);
		add(inputNumberOne);
		add(choiceFuhao);
		add(inputNumberTwo);
		add(button);
		add(new JScrollPane(textShow));
	}
}
红色标记地方错误!写的时候注意看下[/quote] ??没看到红色的啊,编译没错[/quote] computer.setJTextFieldOne(inputNumberOne); computer.setJTextFieldOne(inputNumberTwo); --你这赋值是不是有问题啊?应该是computer.setJTextFieldTwo(inputNumberTwo) 原因你自己捉摸吧!!!
  • 打赏
  • 举报
回复
工作后很少用这块知识,如果感兴趣看以研究下GUI,如果楼主是想找份工作建议还是不要在这块知识中投入太多时间了,继续往后边学吧
小懒虫爱贪玩 2015-05-04
  • 打赏
  • 举报
回复
引用 3 楼 u011376884 的回复:
错误代码发出来 不然怎么定位……
double number2 = Double.parseDouble(inputNumberTwo.getText());这一句显示异常
小懒虫爱贪玩 2015-05-04
  • 打赏
  • 举报
回复
引用 4 楼 janda2011 的回复:
对,把错误码贴出来吧!
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at ComputerListener.actionPerformed(ComputerListener.java:34) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$500(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)
小懒虫爱贪玩 2015-05-04
  • 打赏
  • 举报
回复
引用 5 楼 hz_huazhang 的回复:
[quote=引用 楼主 abcde0221 的回复:] 本人Java初学者,前不久在看《Java2实用教程(第三版)》(耿祥义)这本教材,照着9.4节-事件处理-例9_8编译了简易计算器小程序,定义了4个Java类,结果运行结果总是出错,后来去掉try catch块后就显示java.lang.NullPointerException错误了,可是我对过几遍了,和书本上的代码好像一模一样啊,纠结。。。。 不多说,上代码:

//Ex9_8.java
public class Ex9_8 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		WindowOperation win=new WindowOperation();
		win.setBounds(100,100,390,360);
		win.setTitle("简单计算器");
	}
}

//ComputerListener.java
import java.awt.event.*;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.io.*;

public class ComputerListener implements ActionListener {

	JTextField inputNumberOne, inputNumberTwo;
	JTextArea textShow;
	String fuhao;

	public void setJTextFieldOne(JTextField t) {
		
		inputNumberOne = t;
	}

	public void setJTextFieldTwo(JTextField t) {
		
		inputNumberTwo = t;
	}

	public void setJTextArea(JTextArea area) {
		textShow = area;
	}

	public void setFuhao(String s) {
		fuhao = s;
	}

	public void actionPerformed(ActionEvent e) {
//		try {
			
			double number1 = Double.parseDouble(inputNumberOne.getText());
			double number2 = Double.parseDouble(inputNumberTwo.getText());
			System.out.println(number1);
			System.out.println(number1);

			double result = 0;
			if (fuhao.equals("+")) {
				result = number1 + number2;
			} else if (fuhao.equals("-")) {
				result = number1 - number2;
			} else if (fuhao.equals("*")) {
				result=number1*number2;
			}else if (fuhao.equals("/")) {
				result=number1/number2;
			}
			textShow.append(number1+" "+fuhao+" "+number2+" "+result+"\n");		

//		} catch (Exception exp) {
//			// TODO: handle exception
//			textShow.append("\n 请输入数字字符"+exp.toString());
//		}
	}
}

//OperatorListener.java
import java.awt.event.*;
import javax.swing.*;
public class OperatorListener implements ItemListener {
	JComboBox choice;
	ComputerListener workTogether;
	public void setJComboBox(JComboBox box) {
		choice=box;
	}
	public void setWorkTogether(ComputerListener computer) {
		workTogether=computer;
	}
	
	public void itemStateChanged(ItemEvent e) {
		// TODO Auto-generated method stub
		String fuhao=choice.getSelectedItem().toString();
		workTogether.setFuhao(fuhao);
	}
}

//WindowOperation .java
import java.awt.*;
import java.io.*; 
import javax.swing.*;

public class WindowOperation extends JFrame{
	JTextField inputNumberOne,inputNumberTwo;
	JComboBox choiceFuhao;
	JTextArea textShow;
	JButton button;
	OperatorListener operator;
	ComputerListener computer;
	public WindowOperation() {
		// TODO Auto-generated constructor stub
		init();
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	void init(){
		setLayout(new FlowLayout());
		inputNumberOne=new JTextField(5);
		inputNumberTwo=new JTextField(5);
		choiceFuhao=new JComboBox();
		button=new JButton("计算");
		choiceFuhao.addItem("选择运算符号:");
		String []a={"+","-","*","/"};
		for (int i = 0; i < a.length; i++) {
			choiceFuhao.addItem(a[i]);
		}
		textShow=new JTextArea(9,30);
		operator=new OperatorListener();
		computer=new ComputerListener();
		operator.setJComboBox(choiceFuhao);
		operator.setWorkTogether(computer);
		computer.setJTextFieldOne(inputNumberOne);
		computer.setJTextFieldOne(inputNumberTwo);
		computer.setJTextArea(textShow);
		choiceFuhao.addItemListener(operator);
		button.addActionListener(computer);
		add(inputNumberOne);
		add(inputNumberOne);
		add(choiceFuhao);
		add(inputNumberTwo);
		add(button);
		add(new JScrollPane(textShow));
	}
}
红色标记地方错误!写的时候注意看下[/quote] ??没看到红色的啊,编译没错
丶顛簸人生 2015-05-04
  • 打赏
  • 举报
回复
引用 楼主 abcde0221 的回复:
本人Java初学者,前不久在看《Java2实用教程(第三版)》(耿祥义)这本教材,照着9.4节-事件处理-例9_8编译了简易计算器小程序,定义了4个Java类,结果运行结果总是出错,后来去掉try catch块后就显示java.lang.NullPointerException错误了,可是我对过几遍了,和书本上的代码好像一模一样啊,纠结。。。。 不多说,上代码:

//Ex9_8.java
public class Ex9_8 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		WindowOperation win=new WindowOperation();
		win.setBounds(100,100,390,360);
		win.setTitle("简单计算器");
	}
}

//ComputerListener.java
import java.awt.event.*;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.io.*;

public class ComputerListener implements ActionListener {

	JTextField inputNumberOne, inputNumberTwo;
	JTextArea textShow;
	String fuhao;

	public void setJTextFieldOne(JTextField t) {
		
		inputNumberOne = t;
	}

	public void setJTextFieldTwo(JTextField t) {
		
		inputNumberTwo = t;
	}

	public void setJTextArea(JTextArea area) {
		textShow = area;
	}

	public void setFuhao(String s) {
		fuhao = s;
	}

	public void actionPerformed(ActionEvent e) {
//		try {
			
			double number1 = Double.parseDouble(inputNumberOne.getText());
			double number2 = Double.parseDouble(inputNumberTwo.getText());
			System.out.println(number1);
			System.out.println(number1);

			double result = 0;
			if (fuhao.equals("+")) {
				result = number1 + number2;
			} else if (fuhao.equals("-")) {
				result = number1 - number2;
			} else if (fuhao.equals("*")) {
				result=number1*number2;
			}else if (fuhao.equals("/")) {
				result=number1/number2;
			}
			textShow.append(number1+" "+fuhao+" "+number2+" "+result+"\n");		

//		} catch (Exception exp) {
//			// TODO: handle exception
//			textShow.append("\n 请输入数字字符"+exp.toString());
//		}
	}
}

//OperatorListener.java
import java.awt.event.*;
import javax.swing.*;
public class OperatorListener implements ItemListener {
	JComboBox choice;
	ComputerListener workTogether;
	public void setJComboBox(JComboBox box) {
		choice=box;
	}
	public void setWorkTogether(ComputerListener computer) {
		workTogether=computer;
	}
	
	public void itemStateChanged(ItemEvent e) {
		// TODO Auto-generated method stub
		String fuhao=choice.getSelectedItem().toString();
		workTogether.setFuhao(fuhao);
	}
}

//WindowOperation .java
import java.awt.*;
import java.io.*; 
import javax.swing.*;

public class WindowOperation extends JFrame{
	JTextField inputNumberOne,inputNumberTwo;
	JComboBox choiceFuhao;
	JTextArea textShow;
	JButton button;
	OperatorListener operator;
	ComputerListener computer;
	public WindowOperation() {
		// TODO Auto-generated constructor stub
		init();
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	void init(){
		setLayout(new FlowLayout());
		inputNumberOne=new JTextField(5);
		inputNumberTwo=new JTextField(5);
		choiceFuhao=new JComboBox();
		button=new JButton("计算");
		choiceFuhao.addItem("选择运算符号:");
		String []a={"+","-","*","/"};
		for (int i = 0; i < a.length; i++) {
			choiceFuhao.addItem(a[i]);
		}
		textShow=new JTextArea(9,30);
		operator=new OperatorListener();
		computer=new ComputerListener();
		operator.setJComboBox(choiceFuhao);
		operator.setWorkTogether(computer);
		computer.setJTextFieldOne(inputNumberOne);
		computer.setJTextFieldOne(inputNumberTwo);
		computer.setJTextArea(textShow);
		choiceFuhao.addItemListener(operator);
		button.addActionListener(computer);
		add(inputNumberOne);
		add(inputNumberOne);
		add(choiceFuhao);
		add(inputNumberTwo);
		add(button);
		add(new JScrollPane(textShow));
	}
}
红色标记地方错误!写的时候注意看下
等待时候 2015-05-04
  • 打赏
  • 举报
回复
对,把错误码贴出来吧!
  • 打赏
  • 举报
回复
错误代码发出来 不然怎么定位……
小懒虫爱贪玩 2015-05-04
  • 打赏
  • 举报
回复
我改成了String fuhao="+";结果还是一样的
引用 1 楼 janda2011 的回复:
fuhao 是不是没有初始话一下试试?
等待时候 2015-05-04
  • 打赏
  • 举报
回复
fuhao 是不是没有初始话一下试试?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧