Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
I';我试图从类(Starting.java)中打开一个类(FlappyBird.java),但我不能使用;新游戏().setvisible(true)";_Java_Eclipse - Fatal编程技术网

I';我试图从类(Starting.java)中打开一个类(FlappyBird.java),但我不能使用;新游戏().setvisible(true)";

I';我试图从类(Starting.java)中打开一个类(FlappyBird.java),但我不能使用;新游戏().setvisible(true)";,java,eclipse,Java,Eclipse,我有这两门课。一个是游戏,另一个是菜单类。我的目标是从类(Starting.java)中打开一个类(FlappyBird.java),但是我不能使用“new FlappyBird().setVisible(true)”有人知道如何解决这个问题吗 public class FlappyBird implements ActionListener, MouseListener, KeyListener { public static FlappyBird flappybird; int width

我有这两门课。一个是游戏,另一个是菜单类。我的目标是从类(Starting.java)中打开一个类(FlappyBird.java),但是我不能使用“new FlappyBird().setVisible(true)”有人知道如何解决这个问题吗

public class FlappyBird implements ActionListener, MouseListener, KeyListener {

public static FlappyBird flappybird;
int width=800,height=600;

public Renderer renderer;
public Rectangle bird;

public Random rand;

public ArrayList <Rectangle>columns;

public int ticks,yMotion;

public boolean gameOver,started;
public int score;


public FlappyBird() {

    renderer=new Renderer();
    rand=new Random();
    Timer timer=new Timer(20, this);

    JFrame jframe=new JFrame();
    jframe.add(renderer);
    jframe.setSize(width, height);
    jframe.setVisible(true);
    jframe.setResizable(false);
    jframe.setTitle("Flappy Bird");
    jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jframe.addMouseListener(this);
    jframe.addKeyListener(this);

    bird=new Rectangle(width/2-10,height/2-10,20,20);
    columns=new ArrayList<Rectangle>();


    addColumn(true);
    addColumn(true);


    timer.start();

}

public void addColumn(boolean start) {
    int space=300;
    int widthh=100;
    int heightt=50+rand.nextInt(300);

    if(start) {
        columns.add(new Rectangle(width+widthh+columns.size()*300,height-heightt-120,widthh,heightt));
        columns.add(new Rectangle(width+widthh+(columns.size()-1)*300,0,widthh,height-heightt-space));
    }else {
        columns.add(new Rectangle(columns.get(columns.size()-1).x+600,height-heightt-120,widthh,heightt));
        columns.add(new Rectangle(columns.get(columns.size()-1).x,0,widthh,height-heightt-space));
    }


}

public void paintColumn(Graphics g,Rectangle column) {
    g.setColor(Color.GREEN.darker());
    g.fillRect(column.x, column.y, column.width, column.height);
}

public void repaint(Graphics g) {
    g.setColor(Color.CYAN);
    g.fillRect(0, 0, width, height);

    g.setColor(Color.orange);
    g.fillRect(0, height-120, width, 130);

    g.setColor(Color.green);
    g.fillRect(0, height-120, width, 20);

    g.setColor(Color.red);
    g.fillRect(bird.x, bird.y, bird.width, bird.height);

    for(Rectangle column: columns) {
        paintColumn(g,column);
    }

    g.setColor(Color.white);
    g.setFont(new Font("Ariel",1,100));
    if(gameOver) {
        g.drawString("Game Over", 100, height/2-50);
    }

    if(!started) {
        g.drawString("Click to Start", 100, height/2-50);
    }
    if(!gameOver && started) {
        g.drawString(String.valueOf(score), width/2-50, 100);
    }

}

public static void main(String[] args) {
    flappybird=new FlappyBird();

}

@Override
public void actionPerformed(ActionEvent arg0) {

    int speed=5;
    ticks++;

    if(started) {

    for(int i=0;i<columns.size();i++) {
        Rectangle rec = columns.get(i);
        rec.x-=speed;

    }

    if(ticks %2 == 0 && yMotion<15) {
        yMotion += 2;
    }

    for(int i=0;i<columns.size();i++) {
        Rectangle column=columns.get(i);
        if(column.x+column.width<0) {
            columns.remove(column);
            if(column.y==0) {
                addColumn(false);
            }

        }
    }

    bird.y+= yMotion;

    for(Rectangle column: columns) {
        if(column.y==0 && bird.x+bird.width/2 > column.x+column.width/2- 5 && bird.x+bird.width/2<column.x+column.width/2+5) {
            score++;
        }
        if(column.intersects(bird)) {
            gameOver=true;
            if(bird.x<=column.x) {
                bird.x=column.x-bird.width;
            }else {
                if(column.y !=0 ) {
                    bird.y=column.y-bird.height;
                }
            }

            bird.x=column.x-bird.width;
        }
    }
    if(bird.y > height-120 || bird.y<0 ||bird.y>475 ) {
        gameOver=true;
    }

    if(bird.y+yMotion >= height-120){
        bird.y=height-120-bird.height;
    }

    }
    renderer.repaint();

}

public void jump() {
    if(gameOver) {
        bird=new Rectangle(width/2-10,height/2-10,20,20);
        columns.clear();
        yMotion=0;
        score=0;


        addColumn(true);
        addColumn(true);
        gameOver=false;
    }
    if(!started) {
        started=true;
    }
    else if(!gameOver) {
        if(yMotion>0) {
            yMotion=0;
        }
        yMotion-=10;
    }
}

@Override
public void mouseClicked(MouseEvent arg0) {
    jump();
}

@Override
public void mouseEntered(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void mousePressed(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void keyPressed(KeyEvent arg0) {

}

@Override
public void keyReleased(KeyEvent arg0) {
    if(arg0.getKeyCode()==KeyEvent.VK_SPACE) {
        jump();
    }

}

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

}

问题是我不能键入“new FlappyBird().setVisible(true);“有人能修复这个错误吗?

您的游戏类没有实现任何java的可视化界面。。。添加“扩展JFrame”

这样就可以了。

一些可能的原因:

  • Check setVisible具有
    公共
    修饰符
  • 检查设置可见参数计数
  • 如果类在同一个包中,请检查setVisible是否受保护或根本没有修改器
  • 让游戏实现一个提供setVisible方法的接口
  • 让游戏在不使用私有修饰符的情况下扩展一个提供setVisible方法的类
  • 检查游戏类是否导入了正确的类

您还应该将UI与功能逻辑分离

我的意思是,你应该有一个游戏类,只用于存储数据、制作操作等,需要的数据应该通过可视化方法提供给制作游戏实例的类,并在相应的标签中显示它们,等等

该方案可以如下所示:
“父用户界面”
(带有信息标签,仅包含用户界面组件等)游戏类(操作、统计等控制器)游戏实例数据存储类(玩家姓名等)

在这种情况下,您不需要扩展swing组件(例如JFrame)——无论是在游戏类中,还是在实例数据存储类中,只要在“查看器”中——在我的情况下,您可以通过控制器方法提供数据

(UI可以包括游戏控制器的实例,在游戏控制器中,您还可以创建特定游戏的实例)


你得到了什么错误?你能分享游戏类的全部代码吗?那是一个游戏类,不是FlappyBird检查我的FlappyBird类我不想使用extends JFrame,有没有办法解决坚持使用相同内容的问题。
public class Starting extends JFrame{
    JLabel l = new JLabel("Name:");
    JTextField t= new JTextField(10);

    JButton start = new JButton("Start");
    JButton back = new JButton("Back");

    JPanel p1 = new JPanel();
    public Starting() {
        p1.add(l);
        p1.add(t);
        p1.add(start);
        p1.add(back);

        this.add(p1);
        this.setTitle("Starting");
        this.setSize(300,300);


        start.addActionListener(new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) {
                dispose();
                new FlappyBird().setVisible(true);
            }

        });

    }
    public static void main(String[] args) {
        Starting l = new Starting();

        l.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

}
public class Game extends JFrame implements ActionListener, MouseListener, KeyListener { ... }