gpt4 book ai didi

netbeans 中的 Java 程序无法正常运行,但在调试时工作得很好

转载 作者:行者123 更新时间:2023-12-02 03:52:53 25 4
gpt4 key购买 nike

晚上好,最近几天我一直在使用 Netbeans 编写贪吃蛇游戏。一切都很好,直到今天我决定放入 JMenuBar 以便用户可以设置难度等。这也工作得很好,但是当我放置 MenuItems 的监听器时,程序在运行项目时只会显示一个空框架(F6) 。但是当我单击调试项目(ctrl + f5)时,游戏正常启动。当我删除监听器时,运行按钮也可以使用。知道为什么会这样吗?主类:

    package test1;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.logging.Level;
import java.util.logging.Logger;



public class Test1 extends JPanel implements KeyListener, Runnable{

private JFrame frame;
private Schlange snake;
private Apfel apfel;
private boolean up;
private boolean left;
private boolean right;
private boolean down;
private int bounds;
private boolean beschleunigen;
private int level;
private JMenu menu;
private JMenu sub1;
private JMenu sub2;
private JMenuItem restart;
private JMenuItem schw1, schw2, schw3, schw4, schw5;
private JMenuBar menuBar;
private boolean running;
public Test1(){
super();
init();
}

public static void main(String[] args) {

Test1 t1 = new Test1();
}

private void init() {
bounds = 300;
//Frame
frame = new JFrame();
frame.setSize(bounds,bounds);
frame.setTitle("Snake by Fluffy");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocation(100,100);
frame.setVisible(true);
frame.setFocusable(true);
frame.setResizable(false);
frame.addKeyListener(this);

//Spiel
snake = new Schlange(5, this);
apfel = new Apfel(frame);
up = false;
left = false;
right = false;
down = false;
apfel.getRnd(snake);
level = 160;
beschleunigen = false;
running = true;

//Menue
sub1 = new JMenu("Schwierigkeit");
sub2 = new JMenu("Spiel");
schw1 = new JMenuItem("Leicht");
schw2 = new JMenuItem("Mittel");
schw3 = new JMenuItem("Schwer");
schw4 = new JMenuItem("Irre");
schw5 = new JMenuItem("Beschleunigung");
restart = new JMenuItem("Neustart");



//Menue Listener
schw1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
level = 200;
}
});

schw2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
level = 160;
}
});

schw3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
level = 120;
}
});

schw4.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
level = 80;
}
});

schw5.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
beschleunigen = true;
}
});

restart.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
restart();
}
});



sub1.add(schw1);
sub1.add(schw2);
sub1.add(schw3);
sub1.add(schw4);
sub1.add(schw5);
sub2.add(restart);
menuBar = new JMenuBar();
menu = new JMenu("Optionen");
menu.add(sub1);
//menu.add(restart);
menuBar.add(sub2);
menuBar.add(menu);

//Ende
frame.setJMenuBar(menuBar);
this.setBackground(Color.green);
frame.add(this);
run();
}

@Override
public void paintComponent(Graphics gr) {
super.paintComponent(gr);
apfel.paintComponent(gr);
if(snake.collision()) {
gr.drawString("GAME OVER", 200, 200);
running = false;
}
snake.paintComponent(gr);

}

@Override
public void keyTyped(KeyEvent e) {
}

@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case 37:
if(right!=true){
left = true;
up = false;
down = false;
right = false;
}
break;
case 38:
if(down!=true){
up = true;
down = false;
right = false;
left = false;
}
break;
case 39:
if(left!=true){
right = true;
left = false;
up = false;
down = false;
}
break;
case 40:
if(up!=true){
down = true;
up = false;
right = false;
left = false;
}
break;
default:
break;
}
}

@Override
public void keyReleased(KeyEvent e) {

}

@Override
public void run() {
while (running) {
if(up) snake.move("up");
if(down) snake.move("down");
if(left) snake.move("left");
if(right) snake.move("right");
repaint();
if(snake.collisionApfel(apfel.getX(), apfel.getY())) {
apfel.getRnd(snake);
if(level > 20 && beschleunigen) level -= 10;
}
try {
Thread.sleep(level);
} catch (InterruptedException ex) {
Logger.getLogger(Test1.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

public Apfel getApfel(){
return apfel;
}

public void restart(){
snake = null;
apfel = null;
snake = new Schlange(5, this);
apfel = new Apfel(frame);
repaint();
up = false;
left = false;
right = false;
down = false;
apfel.getRnd(snake);
level = 160;
beschleunigen = false;
running = true;
}


}

如果需要,我也可以发布其他类,但它们不应该是问题...一些代码是德语的,我希望也没有问题:D

最佳答案

frame.setVisible(true); 放在 init 方法的末尾。屏幕上实现的帧与 EDT 之间存在竞争条件

关于netbeans 中的 Java 程序无法正常运行,但在调试时工作得很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35733534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com