【发布时间】:2014-08-09 18:23:50
【问题描述】:
当我尝试通过按下按钮创建新对象时不断收到错误消息。帮助和解释将不胜感激我的猜测是这里有一个胭脂()?或其他容易发现但我没有看到的东西
public class Main extends JFrame {
int GWIDTH = 400;
int GHEIGHT = 300;
private Image dbImage;
private Graphics dbg;
int x,y;
int rectX, rectY;
int random;
boolean mouseOnScreen;
boolean mouseDragged;
int click = 0;
int Resource = 0;
int ore = 100;
int mx, my;
public Main(){
setSize(GWIDTH, GHEIGHT);
setTitle("Game");
setResizable(false);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addMouseListener(new Mouse());
frame(dbg);
x = 0;
y = 0;
random = 100;
}
private void frame(Graphics g) {
JFrame f = new JFrame();
f.setVisible(true);
f.setSize(400, 400);
JPanel p = new JPanel();
JButton b1 = new JButton("New ore");
JButton b2 = new JButton("New worker");
JButton b3 = new JButton("Upgrade pick");
JButton b4 = new JButton("Turret");
JButton b5 = new JButton("Barrack");
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null,"Succses!");
System.out.println(Resource-=ore);
Rectangle r3 = new Rectangle(300, 50, 50, 50);
g.setColor(Color.RED);
g.fillRect(r3.x, r3.y, r3.width, r3.height);
}
});
p.add(b1);
p.add(b2);
p.add(b3);
p.add(b4);
p.add(b5);
f.add(p);
}
public class Mouse extends MouseAdapter implements MouseMotionListener {
@Override
public void mousePressed(MouseEvent e){
click += e.getClickCount();
rectX = e.getX();
rectY = e.getY();
y = rectY;
x = rectX;
Rectangle r1 = new Rectangle(rectX, rectY, 7, 7);
Rectangle r2 = new Rectangle(175, 75, 50, 50);
if(r1.intersects(r2))
Resource += e.getClickCount();
}
@Override
public void mouseReleased(MouseEvent e){
}
@Override
public void mouseEntered(MouseEvent e){
mouseOnScreen = true;
rectX = e.getX();
rectY = e.getY();
}
@Override
public void mouseExited(MouseEvent e){
mouseOnScreen = false;
rectX = e.getX();
rectY = e.getY();
}
@Override
public void mouseDragged(MouseEvent e){
click += e.getClickCount();
rectX = e.getX();
rectY = e.getY();
mouseDragged = true;
e.consume();
}
@Override
public void mouseMoved(MouseEvent e){
rectX = e.getX();
rectY = e.getY();
e.consume();
}
}
public void paint(Graphics g){
dbImage = createImage(getWidth(), getHeight());
dbg = dbImage.getGraphics();
paintComponent(dbg);
g.drawImage(dbImage, 0, 0, this);
}
public void paintComponent(Graphics g){
g.fillOval(x, y, 7, 7);
g.setColor(Color.red);
g.drawString("Clicks ("+click+")", 40, 40);
Rectangle r1 = new Rectangle(rectX, rectY, 7, 7);
Rectangle r2 = new Rectangle(175, 75, 50, 50);
Rectangle r3 = new Rectangle(300, 50, 50, 20);
g.setColor(Color.RED);
g.fillRect(r2.x, r2.y, r2.width, r2.height);
g.setColor(Color.BLUE);
g.fillRect(r1.x, r1.y, r1.width, r1.height);
g.drawString("Resources:("+Resource+")", 40, 50);
repaint();
}
public static void main (String[] args) {
Main main = new Main();
}
}
这是我的错误
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at main.Main$1.actionPerformed(Main.java:80)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6527)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6292)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4883)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2739)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
【问题讨论】:
-
这是什么?
System.out.println(Resource-=ore);只需按照堆栈跟踪中引用的行号即可。 -
最重要的是,您需要了解如何调试 NPE (NullPointerException) 的一般概念。 您应该仔细检查引发异常的行,找出哪个变量为空,然后回溯到您的代码中找出原因。你会一次又一次地遇到这些,相信我。
-
@Julian,复合语句?用户...,看起来你在第 80 行有一个
null罪魁祸首。去看看它是什么。 -
您对 java.awt.Graphics 的使用是有问题的,因为您在课堂上使用了 Graphics 字段,这是一件危险的事情。顺便问一下,上面代码的第 80 行是哪一行?
-
另外,如果您需要帮助找出答案,请在您的帖子中说明哪一行是第 80 行。我不会开始计算程序中的行数来确定哪一行是第 80 行。(而且发帖者经常删除额外的 cmets 或只发布他们的部分代码,所以我无法确定我的计数是否给出正确的行。)
标签: java swing nullpointerexception