【发布时间】:2014-10-30 01:48:55
【问题描述】:
我的代码可以编译并且看起来运行良好,直到我点击了 JButton,然后我得到了很多错误。我不确定我做错了什么。代码应该做的是出现一个窗口,并在单击按钮时随机显示两个骰子图像。图片和我的程序在同一个目录下,它们被命名为 1-6。
代码如下:
import java.lang.Math;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DiceSimulator extends JFrame
{
private JLabel dieOne;
private JLabel dieTwo;
public DiceSimulator()
{
setTitle("Dice Simulator");
JLabel dieOne, dieTwo;
dieOne = new JLabel();
dieTwo = new JLabel();
JButton button = new JButton("Roll the Dice");
button.addActionListener(new buttonListener());
setLayout(new BorderLayout());
JPanel panel = new JPanel();
panel.add(button, BorderLayout.SOUTH);
panel.add(dieOne);
panel.add(dieTwo);
add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
private class buttonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
ImageIcon one = new ImageIcon("1.jpg");
ImageIcon two = new ImageIcon("2.jpg");
ImageIcon three = new ImageIcon("3.jpg");
ImageIcon four = new ImageIcon("4.jpg");
ImageIcon five = new ImageIcon("5.jpg");
ImageIcon six = new ImageIcon("6.jpg");
int firstRoll = (int)(Math.random()*6)+1;
int secondRoll = (int)(Math.random()*6)+1;
switch(firstRoll)
{
case 1: dieOne.setIcon(one);
dieOne.setText(null);
break;
case 2: dieOne.setIcon(two);
dieOne.setText(null);
break;
case 3: dieOne.setIcon(three);
dieOne.setText(null);
break;
case 4: dieOne.setIcon(four);
dieOne.setText(null);
break;
case 5: dieOne.setIcon(five);
dieOne.setText(null);
break;
case 6: dieOne.setIcon(six);
dieOne.setText(null);
break;
}
switch(secondRoll)
{
case 1: dieTwo.setIcon(one);
dieTwo.setText(null);
break;
case 2: dieTwo.setIcon(two);
dieTwo.setText(null);
break;
case 3: dieTwo.setIcon(three);
dieTwo.setText(null);
break;
case 4: dieTwo.setIcon(four);
dieTwo.setText(null);
break;
case 5: dieTwo.setIcon(five);
dieTwo.setText(null);
break;
case 6: dieTwo.setIcon(six);
dieTwo.setText(null);
break;
}
}
}
public static void main(String[] args)
{
new DiceSimulator();
}
}
这是我点击按钮时遇到的错误:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at DiceSimulator$buttonListener.actionPerformed(DiceSimulator.java:57)
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$200(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)
【问题讨论】:
-
阅读例外情况 - 他们不仅会为您提供所有您知道的有趣信息,它实际上是一个关键的诊断工具。在您的情况下,DiceSimulator.java 的第 57 行的某些内容为空
-
我不知道怎么读,我是初学者,如果是其他方式我不会有这个问题。
-
第 57 行是哪一行?
-
dieOne.setText(null);在我的第一个开关的案例 6 下。不过我不明白这有什么关系。
标签: java user-interface logic runtime-error