>

따라서 게임을 만들고 있는데 다른 모든 클래스가 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

    단순 :

    JFrame frame = new JFrame("Space Shooter");
    
    

    그리고

    frame.add(alienAttack);
    
    

    첫 번째 JFrame에 다른 JFrame을 추가 할 수는 없습니다.

    사실 : 모든 GUI 프레임 워크는 매우 복잡합니다. 결과적으로 시행 착오에 의한 프로그래밍은 합리적인 전략이 아닙니다.

    그러므로 정답은 다음과 같습니다.가정할 수 있기 때문에하지 말아야합니다. 현재하고있는 일을이해하는 데 필요한 시간을 소비해야합니다.

    당신의 경우 : 리서치 스윙. 오라클 튜토리얼은 좋은 출발점입니다. 간단히 말해서 : 위에서 아래로 읽으십시오. 예제 코드를 읽고 복사 한 다음 해당 작업 코드를 기반으로 실험 해보십시오. 그런 다음 Swing을 사용하여 "다리를 밟을"정도로 능숙하면 돌아와서 현재 애플릿 기반 응용 프로그램의 구조를 살펴보십시오. 배운 내용을 적용하고 Swing 응용 프로그램 내에서 재사용 할 수있는 부분을 분석하십시오.

    컨텍스트에 따라, "메인"프레임 (창)을 결정한 다음 다른 것을 추가하는 방법을 알아내는 것과 같이 다소 쉬울 수 있습니다. 첫 번째 시도는 AlienAttack을 JFrame에서 JPanel로 변경하는 것에 대한 첫 번째 시도라고 생각합니다. 프레임이 아닌 프레임에패널을 추가합니다!

  • 이전 javascript - React에서 상태와 소품의 차이점은 무엇입니까?
  • 다음 java - Thread on Loop 사용시 예외