简体   繁体   English

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

[英]Java Application in JFrame gets stuck after StartMenu

I have made a game with 20+ classes in it and if I run the application in Eclipse it perfectly works. 我已经制作了一个包含20多个类的游戏,如果我在Eclipse中运行该应用程序,它就完美无缺。

Now if I export the game to a runnable jar, it gets stuck when I try to launch the game. 现在,如果我将游戏导出到一个可运行的jar中,当我尝试启动游戏时它就会卡住。 But the weird thing is that my intro plays and I can continue by pressing "enter" to my menu, but if I try to start the game from there, the menu gets stuck. 但奇怪的是,我的介绍是播放,我可以继续按“输入”到我的菜单,但如果我尝试从那里开始游戏,菜单就会卡住。 (normally the background of my menu moves) (通常我菜单的背景移动)

So, I have three GameState wich are called introState , menuState and level1State . 所以,我有三个GameState至极被称为introStatemenuStatelevel1State These three all extend from GameState. 这三个都来自GameState。 introState and menuState work perfectly but level1State doesn't. introState和menuState完美地工作,但是level1State没有。

I'll put the code from level1State and the manifestfile here. 我将把level1State和manifestfile中的代码放在这里。 Eclipse doesn't give me any errors. Eclipse没有给我任何错误。

My game does have a Main-class and every class displayed does exist and works. 我的游戏确实有一个Main-class,每个显示的类确实存在并且有效。

Any ideas on what causes this and how to solve this? 关于是什么原因以及如何解决这个问题的任何想法? Or maybe another way to play this game outside eclipse? 或者也许是另一种在日食之外玩这个游戏的方式?

package GameState; 包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 file: 清单文件:

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

DId you export it as a runnable JAR or as a JAR file? 您将它导出为可运行的JAR还是JAR文件? Try both if you haven't yet. 如果你还没有尝试两者。 I use the same engine and it works for me but i exported it as a jar it didn't work completely while when I exported it as a runnable JAR file it does work. 我使用相同的引擎,它适用于我,但我导出它作为一个jar它不完全工作,而当我导出它作为一个可运行的JAR文件,它确实有效。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM