Java 访问jpn铭牌时出错为什么?

Java 访问jpn铭牌时出错为什么?,java,Java,在我的代码中,它在if(collision())中给出了Ball类的move方法中的错误,因为它无法解析plate,Ball类的碰撞方法无法解析plate对象,即jpn.plate给出了错误,但当我在internet上看到此代码时,它工作正常,为什么 JPanel.java import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import j

在我的代码中,它在if(collision())中给出了Ball类的move方法中的错误,因为它无法解析plate,Ball类的碰撞方法无法解析plate对象,即jpn.plate给出了错误,但当我在internet上看到此代码时,它工作正常,为什么

JPanel.java

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class JPanel extends JPanel {
    int x = 0;
    int y = 0;
    Ball ball = new Ball(this);
    Plate plate = new Plate(this);

    void move() {// move
        ball.move();
        plate.move();
    }

    JPanel(){
        //constructor
        KeyListener k=new KeyListener(){

            @Override

            public void keyPressed(KeyEvent e) {
                // TODO Auto-generated method stub
                //System.out.println(KeyEvent.getKeyText(e.getKeyCode()));

                plate.keyPressed(e);
                @Override

            }
            public void keyReleased(KeyEvent e) {
                // TODO Auto-generated method stub

                plate.keyReleased(e);                                          }

            @Override
            public void keyTyped(KeyEvent e) {
                // TODO Auto-generated method stub

            }

        };
        addKeyListener(k);
        setFocusable(true);
    }

    public void paint(Graphics g) {// paint

        super.paint(g);// pehle screen saaf karo pehle jaisi
        setBackground(Color.black);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        ball.paint(g2d);
        plate.paint(g2d);
        // super.paint(g);//agar yaha to puri screen pehle jaisi saaf ho jaegi
    }

    public void gameOver() {
        JOptionPane.showMessageDialog(this, "GameOver", "GameOver",
                JOptionPane.YES_NO_OPTION);
        System.exit(ABORT);
    }

    public static void main(String args[]) throws InterruptedException {// main

        Jpanel jp = new Jpanel();
        JFrame frame = new JFrame("Chota Bheem");
        frame.add(jp);
        frame.setBackground(Color.BLACK);
        frame.setSize(500, 500);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);

        while (true) {
            jp.move();
            jp.repaint();
            Thread.sleep(2);
        }
    }
}
Ball.java

class Ball {

    int x = 0;
    int xs = -1, ys = -1;
    int y = 0;

    static final int DIAMETER = 30;
    JPanel jpn;

    Ball(JPanel jpn) {
        this.jpn = jpn;
    }

    public void move() {

        if (x + xs < 0) {
            xs = 1;
        } else if (y + ys < 0) {
            ys = 1;
        } else if (x + xs > jpn.getWidth() - 30) {
            xs = -1;
        } else if (y + ys > jpn.getHeight() - 30) {
            ys = -1;
        }
        x = x + xs;
        y = y + ys;
        if (collision()) {
            ys = -1;
            y = jpn.plate.getTopY() - DIAMETER;
        }
        if (y + ys > 490) {
            ((Jpanel) jpn).gameOver();
        }

    }

    public void paint(Graphics g) {

    }

    public Rectangle getBounds() {

        return new Rectangle(x, y, DIAMETER, DIAMETER);
    }

    public boolean collision() {
        return jpn.plate.getBounds().intersects(getBounds());
    }
}
班级舞会{
int x=0;
intxs=-1,ys=-1;
int y=0;
静态最终内径=30;
JPanel jpn;
鲍尔(JPanel jpn){
this.jpn=jpn;
}
公开作废动议(){
if(x+xs<0){
xs=1;
}如果(y+ys<0),则为else{
ys=1;
}else if(x+xs>jpn.getWidth()-30){
xs=-1;
}如果(y+ys>jpn.getHeight()-30),则为else{
ys=-1;
}
x=x+xs;
y=y+ys;
if(碰撞()){
ys=-1;
y=jpn.plate.getTopY()-直径;
}
如果(y+y>490){
((Jpanel)jpn.gameOver();
}
}
公共空间涂料(图g){
}
公共矩形getBounds(){
返回新矩形(x,y,直径,直径);
}
公共布尔冲突(){
返回jpn.plate.getBounds().intersects(getBounds());
}
}
Plate.java

class Plate {
    int x = 0;
    int xa = 0;
    Jpanel j;
    static final int Y = 490;
    static final int WIDTH = 60;
    static final int HEIGHT = 10;

    Plate(Jpanel j) {
        this.j = j;
    }

    public void move() {
        if (x + xa > 0 && x + xa < j.getWidth() - 60) {
            x = x + xa;
        }

    }

    public void paint(Graphics g) {
        g.setColor(Color.GRAY);

        g.fillRect(x, 450, WIDTH, HEIGHT);
    }

    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            xa = -1;
        }
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            xa = 1;
        }
    }

    public void keyReleased(KeyEvent e) {
        xa = 0;
    }

    public Rectangle getBounds() {
        return new Rectangle(x, Y, WIDTH, HEIGHT);
    }

    public int getTop() {
        return Y;
    }
}
类标牌{
int x=0;
int-xa=0;
Jpanel j;
静态最终积分Y=490;
静态最终整数宽度=60;
静态最终内部高度=10;
板(Jpanel j){
这个。j=j;
}
公开作废动议(){
如果(x+xa>0&&x+xa
在您的类
Ball
Jpanel
对象
jpn
从来没有属性牌,java的
Jpanel
也没有属性牌。因此,您得到了错误

我重命名了名为
JPanel
的类,该类将
JPanel
扩展为
JalPan
,因为它导致了一个错误

编辑

以下是你的3门课:

  • Jalpan.java-
  • Ball.java-
  • Plate.java-

  • “当我在互联网上看到这段代码时,它运行良好”-然后将你的代码与你在互联网上找到的代码进行比较,找出区别。请提供一个。这可能是我迄今为止在这里看到的最糟糕的格式化代码。如果你真的需要帮助,你能至少花点精力让你的代码可读吗?这是在edu4java.com网站上给出的,即使我无法理解它为什么通过Jpanel访问plate。这就是我发布它的原因,请更正它。@SuZure-下载文件,然后运行它。没有人会为您更正/更正代码。如果你不知道一些具体的事情,比如如何做,我们可以帮助你。但是你要我做你想做的事,请打电话给我的办公室,下订单,预付款,然后拿走你的软件。谢谢