在StartMenu之后,JFrame中的Java应用程序被卡住了

时间:2015-02-22 19:57:14

标签: java eclipse swing jframe

我已经制作了一个包含20多个课程的游戏,如果我在Eclipse中运行该应用程序,它就完美无缺。

现在,如果我将游戏导出到一个可运行的jar中,当我尝试启动游戏时它就会卡住。但奇怪的是,我的介绍是播放,我可以继续按“输入”到我的菜单,但如果我尝试从那里开始游戏,菜单就会卡住。 (通常我菜单的背景移动)

所以,我有三个GameState被称为introStatemenuStatelevel1State。这三个都来自GameState。 introState和menuState完美地工作,但是level1State没有。

我将把level1State和manifestfile中的代码放在这里。 Eclipse没有给我任何错误。

我的游戏确实有一个Main-class,每个显示的类确实存在并且有效。

有关导致此问题的原因和解决方法的任何想法?或者也许是另一种在日食之外玩这个游戏的方式?

包GameState;

import Main.GamePanel;
import TileMap.*;
import Entity.*;
import Entity.Enemies.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.ArrayList;

package GameState;

import Main.GamePanel;
import TileMap.*;
import Entity.*;
import Entity.Enemies.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.ArrayList;

public class Level1State extends GameState {

    private TileMap tileMap;
    private Background bg;

    private Player player;

    private ArrayList<Enemy> enemies;

    private HUD hud;

    public Level1State(GameStateManager gsm) {
        this.gsm = gsm;
        init();
    }

    public void init() {

        tileMap = new TileMap(30);
        tileMap.loadTiles("/Tilesets/darktheme.gif");
        tileMap.loadMap("/Maps/level1-1.map");
        tileMap.setPosition(0, 0);
        tileMap.setTween(1);

        bg = new Background("/Backgrounds/backgroundbg.gif", 0.1);

        player = new Player(tileMap);
        player.setPosition(100, 100);

        populateEnemies();

        hud = new HUD(player);

    }

    private void populateEnemies() {

        enemies = new ArrayList<Enemy>();


        Slugger s;
        Point[] points = new Point[] {
            new Point(860, 200),
            new Point(1525, 200),
            new Point(1680, 200),
            new Point(1800, 200)
        };
        for(int i = 0; i < points.length; i++) {
            s = new Slugger(tileMap);
            s.setPosition(points[i].x, points[i].y);
            enemies.add(s);
        }



        Spin s1;
        Point[] point = new Point[]{
                new Point(1990,100)
        };
        for(int k = 0; k < point.length; k ++){
            s1 = new Spin(tileMap);
            s1.setPosition(point[k].x, point[k].y);
            enemies.add(s1);
            //System.out.println(point[k].y);
        }


    }

    public void update() {

        // update player
        player.update();
        tileMap.setPosition(
            GamePanel.WIDTH / 2 - player.getx(),
            GamePanel.HEIGHT / 2 - player.gety()
        );

        // set background
        bg.setPosition(tileMap.getx(), tileMap.gety());

        // attack enemies
        player.checkAttack(enemies);

        // update all enemies
        for(int i = 0; i < enemies.size(); i++) {
            Enemy e = enemies.get(i);
            e.update();
            if(e.isDead()) {
                enemies.remove(i);
                i--;
            }
        }

    }

    public void draw(Graphics2D g) {

        // draw bg
        bg.draw(g);

        // draw tilemap
        tileMap.draw(g);

        // draw player
        player.draw(g);

        // draw enemies
        for(int i = 0; i < enemies.size(); i++) {
            enemies.get(i).draw(g);
        }

        // draw hud
        hud.draw(g);

    }

    public void keyPressed(int k) {
        if(k == KeyEvent.VK_LEFT) player.setLeft(true);
        if(k == KeyEvent.VK_RIGHT) player.setRight(true);
        if(k == KeyEvent.VK_UP) player.setUp(true);
        if(k == KeyEvent.VK_DOWN) player.setDown(true);
        if(k == KeyEvent.VK_SPACE) player.setJumping(true);
        if(k == KeyEvent.VK_E) player.setGliding(true);
        if(k == KeyEvent.VK_A) player.setScratching();
        if(k == KeyEvent.VK_F) player.setFiring();
    }

    public void keyReleased(int k) {
        if(k == KeyEvent.VK_LEFT) player.setLeft(false);
        if(k == KeyEvent.VK_RIGHT) player.setRight(false);
        if(k == KeyEvent.VK_UP) player.setUp(false);
        if(k == KeyEvent.VK_DOWN) player.setDown(false);
        if(k == KeyEvent.VK_SPACE) player.setJumping(false);
        if(k == KeyEvent.VK_E) player.setGliding(false);
    }
}

清单文件:

Manifest-Version: 1.0
Rsrc-Class-Path: ./
Class-Path: .
Rsrc-Main-Class: Main.Game
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

1 个答案:

答案 0 :(得分:0)

您将它导出为可运行的JAR还是JAR文件?如果你还没有,请尝试两者。我使用相同的引擎,它适用于我,但我将它导出为一个它没有完全工作的jar,而当我将它作为一个可运行的JAR文件导出它确实有效。