“我该如何解决?”;“线程中的异常”;AWT-EventQueue-0“;java.lang.NullPointerException“;?

“我该如何解决?”;“线程中的异常”;AWT-EventQueue-0“;java.lang.NullPointerException“;?,java,swing,actionlistener,jlabel,Java,Swing,Actionlistener,Jlabel,你好,我有一个小游戏,我为练习做的。我可以在屏幕上放置一个JLabel,但当我运行ActionListener actionPerformed第三个if语句时,它会停止游戏。另外,对于“线程中的异常”AWT-EventQueue-0“java.lang.NullPointerException”错误,我不知道要更改什么。谢谢:) 代码如下: package me.mikail.movement; import java.awt.BorderLayout; import java.awt.Col

你好,我有一个小游戏,我为练习做的。我可以在屏幕上放置一个JLabel,但当我运行ActionListener actionPerformed第三个if语句时,它会停止游戏。另外,对于“线程中的异常”AWT-EventQueue-0“java.lang.NullPointerException”错误,我不知道要更改什么。谢谢:) 代码如下:

package me.mikail.movement;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;

public class Player extends JComponent implements ActionListener, KeyListener{

Timer time = new Timer(10, this);
private int x = 0, xSpeed = 3, y = 0, ySpeed = 4, stickX = 0, stickY = 400;
private JFrame frame;
private int oneup = 0;
private JLabel info;

public static void main(String[] args){
    Player p = new Player();
    JFrame frame = new JFrame("Player Practice");
    JLabel info = new JLabel(" ");
    frame.setSize(500,500);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(p);
    frame.getContentPane().setBackground(Color.BLACK);
    frame.setResizable(false);
    frame.addKeyListener(p);
    info.setOpaque(true);
    info.setBackground(Color.WHITE);
    frame.add(info, BorderLayout.SOUTH);
}

public void paintComponent(Graphics g){
    super.paintComponents(g);
    //Ball
    g.setColor(Color.BLUE);
    g.fillRect(x, y, 30, 30);
    //Stick
    g.setColor(Color.RED);
    g.fillRect(stickX, stickY, 75, 10);
    time.start();
}
public void points(){
    int counter[] = {0,1,2,3,4,5,6,7,8,9,10};
    for(int i = 0; i<=oneup; i++){
        info.setText("You have "+counter[i]+" point(s)");
    }
    frame.add(info, BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e) {
    //Y's 0 is on the top
    //X's 0  is on the left
    if(x<0){
        xSpeed = -(xSpeed);
    }
    if(x>=470){
        xSpeed = -(xSpeed);
    }
    //when block hits stick
    if(y==stickY){
        if(x>=(stickX)&&x<=(stickX+75)){
            ySpeed = -(ySpeed);
            oneup = (1+oneup);
            points();
        }else{
        }
    }
    if(y<0){
        ySpeed = -(ySpeed);
    }
    if(y>=450){
        ySpeed = -(ySpeed);
    }
    x = (x + xSpeed);
    y = (y + ySpeed);
    repaint();

}

public void keyPressed(KeyEvent e) {
    int key = e.getKeyCode();
    if(key == KeyEvent.VK_A|| key == KeyEvent.VK_LEFT){
        stickX = (stickX - 50);
    }else if(key == KeyEvent.VK_D|| key ==  KeyEvent.VK_RIGHT){
        stickX = (stickX + 50);
    }else{
        System.out.println("Why did you type that?");
    }
}

public void keyReleased(KeyEvent e) {
}

public void keyTyped(KeyEvent e) {
}
}
package me.mikail.movement;
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.KeyEvent;
导入java.awt.event.KeyListener;
导入javax.swing.JComponent;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.Timer;
公共类播放器扩展JComponent实现ActionListener、KeyListener{
定时器时间=新定时器(10,此);
私有int x=0,xSpeed=3,y=0,ySpeed=4,stickX=0,stickY=400;
私有JFrame;
私有int oneup=0;
私人JLabel信息;
公共静态void main(字符串[]args){
玩家p=新玩家();
JFrame=新JFrame(“球员练习”);
JLabel info=新的JLabel(“”);
框架。设置尺寸(500500);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
框架。添加(p);
frame.getContentPane().setBackground(颜色:黑色);
frame.setresizeable(false);
frame.addKeyListener(p);
info.setOpaque(true);
信息背景(颜色:白色);
框架。添加(信息,边界布局。南部);
}
公共组件(图形g){
超级组件(g);
//球
g、 setColor(Color.BLUE);
g、 fillRect(x,y,30,30);
//棍子
g、 setColor(Color.RED);
g、 fillRect(stickX,Stick,75,10);
time.start();
}
公共空分(){
int计数器[]={0,1,2,3,4,5,6,7,8,9,10};

for(int i=0;i=(stickX)和&x
for(int i=0;iI)将for循环更改为iHint:您从不向实例字段
frame
info
分配任何内容,而只向
main
中具有相同名称的(静态)方法局部变量分配内容。
for(int i = 0; i<=i; i++){
    info.setText("You have "+counter[i]+" point(s)");
}