您好,我有一个小练习练习。我可以在屏幕上放置一个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) {
}
}
答案 0 :(得分:2)
for(int i = 0; i<=i; i++){
info.setText("You have "+counter[i]+" point(s)");
}
- i<=i
始终为真,无论i
的值如何。这个for
循环永远不会结束......在这样做时,它可能永远不会实际显示文本。