홈>
따라서 게임을 만들고 있는데 다른 모든 클래스가 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();
}
더 많은 것이 있지만 그것이 관련이 있다고 생각하는 것들입니다. BTW, 와이즈 비즈
그리고
Shot
다른 클래스는 ArrayLists의 클래스를 사용합니다.
내 오류 중 일부는 다음과 같습니다.
Alien
(이것이 주된 것입니다)
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: adding a window to a container
그것의 절반은 lol
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)
- 답변 # 1
관련 질문
- java : 다른 유형의 ArrayList와 다른 유형의 ArrayList와 다른 유형의 ArrayList에서 요소를 다른 유형으로 추가하는 방법은 무엇입니까?
- 기존 Java GUI에 Xchart PieChart를 어떻게 추가합니까?
- java : JPasswordField에서 자리 표시 자를 설정하십시오
- java : 간단한 계산기 code JLabel은 작동하지 않고 JFrame 색상 변경이 작동하지 않습니다.
- 스레드 "AWT-EventQueue-0"스윙 Java의 예외
- JDateChooser를 사용하는 경우이 오류 Java, LANG.NullPointerException 이유가 있고 왜 그런 일이 일어나는지 어떻게 해결하는지 알 수 있습니다.
- JavaFX 노드. getParent () 호출을 방지합니다
- java : JLabel 글꼴 및 전경을 다시 설정할 때 code를 반복하지 않습니까?
- java : JFrame에 이미지 추가
- java : 프로젝트에서 오류가 발생 (호텔 관리 시스템)
단순 :
그리고
첫 번째 JFrame에 다른 JFrame을 추가 할 수는 없습니다.
사실 : 모든 GUI 프레임 워크는 매우 복잡합니다. 결과적으로 시행 착오에 의한 프로그래밍은 합리적인 전략이 아닙니다.
그러므로 정답은 다음과 같습니다.가정할 수 있기 때문에하지 말아야합니다. 현재하고있는 일을이해하는 데 필요한 시간을 소비해야합니다.
당신의 경우 : 리서치 스윙. 오라클 튜토리얼은 좋은 출발점입니다. 간단히 말해서 : 위에서 아래로 읽으십시오. 예제 코드를 읽고 복사 한 다음 해당 작업 코드를 기반으로 실험 해보십시오. 그런 다음 Swing을 사용하여 "다리를 밟을"정도로 능숙하면 돌아와서 현재 애플릿 기반 응용 프로그램의 구조를 살펴보십시오. 배운 내용을 적용하고 Swing 응용 프로그램 내에서 재사용 할 수있는 부분을 분석하십시오.
컨텍스트에 따라, "메인"프레임 (창)을 결정한 다음 다른 것을 추가하는 방법을 알아내는 것과 같이 다소 쉬울 수 있습니다. 첫 번째 시도는 AlienAttack을 JFrame에서 JPanel로 변경하는 것에 대한 첫 번째 시도라고 생각합니다. 프레임이 아닌 프레임에패널을 추가합니다!