【发布时间】:2022-02-17 18:46:12
【问题描述】:
所以我正在制作一个游戏,我想将它从一个小程序切换到一个 JFrame,因为我所有的其他类都使用 JFrame。但是,我不断收到一堆我完全不理解的运行时错误。
我主要尝试将上面提到的 extends Applet 替换为“扩展 JFrame”,以及创建另一个类,在该类中创建一个包含游戏所有内容的 JFrame,例如背景、运动,实际上是整个游戏。
这是其中一个类,我在其中声明了一个包含游戏其余部分的 JFrame:
public class SpaceGame{
JFrame frame = new JFrame("Space Shooter");
AlienAttack alienAttack = new AlienAttack();
public SpaceGame(){
frame.setBounds(320, 25, 1000, 650);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(alienAttack);
}
}
这是您在上面看到的 AlienAttack 类:
public class AlienAttack extends JFrame implements KeyListener, Runnable
{
double xVel; double yVel; final double SPEED = 0.02;
Thread thread;
int direction;
double x, y;
final double FRICTION = 0.98;
boolean upAccel, downAccel, leftAccel, rightAccel;
ArrayList<Shot> shots;
ArrayList<Alien> aliens;
boolean shipActive;
public void init(){
x=475;
y=300;
direction = 1;
xVel = 0; yVel = 0;
shipActive = true;
upAccel = false; downAccel = false; leftAccel = false; rightAccel = false;
shots = new ArrayList<Shot>();
aliens = new ArrayList<Alien>();
this.addKeyListener(this);
thread = new Thread(this);
thread.start();
}
还有更多,但这是我认为相关的内容。顺便说一句,Shot 和 Alien 是其他类,我在 ArrayLists 中使用它们。
我得到的一些错误是:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: adding a window to a container
(这是主要的)
t java.awt.Container.checkNotAWindow(Unknown Source)
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at javax.swing.JFrame.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at SpaceGame.<init>(SpaceGame.java:11)
at TestingGrounds$SnakeHandler.actionPerformed(TestingGrounds.java:82)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
这就像他们中的一半哈哈
【问题讨论】:
标签: java swing user-interface jframe applet