我的代码编译和看似运行良好,直到我打了JButton,然后我得到了很多错误。我不确定我做错了什么。代码应该做的是有一个窗口出现,并随机显示两个骰子图像,当点击按钮时。这些图像与我的程序位于同一个目录中,它们被命名为1-6。基本Java Gui错误:为什么JButton会导致错误?
下面的代码:
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行的内容为null – John3136 2014-10-30 01:51:27
我不知道如何阅读它,我是一个初学者,如果它是其他任何方式,我都不会遇到这个问题。 – Alex 2014-10-30 01:53:45
第57行是什么? – DreadHeadedDeveloper 2014-10-30 01:54:25