Java 未打开JFrame的可运行JAR文件

Java 未打开JFrame的可运行JAR文件,java,swing,jar,jframe,Java,Swing,Jar,Jframe,我有一个神秘的问题,我的JAR文件没有运行。我的游戏打开一个JFrame对象,其中显示所有图形。一切都在Eclipse中工作,但当我尝试将完成的游戏导出为可运行的JAR文件,然后从桌面双击它时,什么都没有发生。我没有收到错误消息或任何东西,我的JFrame也没有弹出,所以没有游戏可玩 我确保我的所有类都有错误或警告,但JFrame仍然没有打开。此外,当我右键单击桌面上的假定可运行的JAR文件,转到属性,然后单击显示安全性的选项卡时,在SYSTEM下的allow类别下会有所有复选标记 这是我的主类

我有一个神秘的问题,我的JAR文件没有运行。我的游戏打开一个JFrame对象,其中显示所有图形。一切都在Eclipse中工作,但当我尝试将完成的游戏导出为可运行的JAR文件,然后从桌面双击它时,什么都没有发生。我没有收到错误消息或任何东西,我的JFrame也没有弹出,所以没有游戏可玩

我确保我的所有类都有错误或警告,但JFrame仍然没有打开。此外,当我右键单击桌面上的假定可运行的JAR文件,转到属性,然后单击显示安全性的选项卡时,在SYSTEM下的allow类别下会有所有复选标记

这是我的主类,如果您需要的话,尽管我怀疑实际的编码是否有问题,因为它在Eclipse中运行良好,只是无法从我的桌面打开:

package com.wierd0games.Under.main;

import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;
import java.util.Random;

import javax.swing.JFrame;

import com.wierd0games.Under.graphics.Draw;
import com.wierd0games.Under.graphics.Sprite;
import com.wierd0games.Under.graphics.SpriteSheet;
import com.wierd0games.Under.input.Keyboard;
import com.wierd0games.Under.mobs.Frog;
import com.wierd0games.Under.mobs.Healthbar;

public class Main extends Canvas implements Runnable {
private static final long serialVersionUID=1L;
public static final int WIDTH=300;
public static final int HEIGHT=WIDTH*9/16;
public static final int SCALE=3;

private JFrame frame;
private boolean running=false;
private Thread thread;
private Draw draw;
private Keyboard keyboard;

private int frames;
private int updates;
private final long TIME_BETWEEN_UPDATES=1000000000/60;

BufferedImage image=new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
int[] pixels=((DataBufferInt)image.getRaster().getDataBuffer()).getData();

Frog frog;
private int[] sideCollisions=new int[0];
private int[] verticalCollisions=new int[0];
private final int WATER_LEVEL=1600;

private Generator generator;
private Healthbar healthbar;
private int score=0;
private int time=60;
private int lastScore=0;
private int lastTimeAlive=0;

private int room=0;
private int counter=0;
private Sprite openingScreenToDraw=new Sprite(1, 1, 300, SpriteSheet.backgrounds);
Random random=new Random();

public static void main(String[] args) {
    Main game=new Main();
    game.frame.setResizable(false);
    game.frame.setTitle("Under           |        FPS: ---  Updates: --");
    game.frame.add(game);
    game.frame.pack();
    game.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    game.frame.setLocationRelativeTo(null);
    game.frame.setVisible(true);
    game.start();
}

private Main() {
    frame=new JFrame();
    Dimension size=new Dimension(WIDTH*SCALE, HEIGHT*SCALE);
    frame.setPreferredSize(size);

    keyboard=new Keyboard();
    addKeyListener(keyboard);
    draw=new Draw(WIDTH, HEIGHT, pixels);

    frog=new Frog(0, 1632, 0.01, .98, .94, .94, WATER_LEVEL, keyboard);
    generator=new Generator(WATER_LEVEL);
    healthbar=new Healthbar(frog.MAX_HUNGER, frog.MAX_BREATH, (int)(frog.MAX_JUMP_CHARGE*100)-40);
}

private void update() {
    if (room==0) {
        if (++counter>300) {
            room=1;
            counter=-60;
            openingScreenToDraw=Sprite.titleScreen;
        }
        else {
            if (counter>120&&counter<280) {
            for (int i=0; i<openingScreenToDraw.pixels.length; i++) {
                if (openingScreenToDraw.pixels[i]!=0) {
                    if (random.nextInt((300-counter-20))==0) {
                        openingScreenToDraw.pixels[i]=0;
                    }
                }
            }
        }
        }
    }

    if (room==1) {
        keyboard.update();
        if (++counter>=0) {
            if (counter>40) {
                counter=0;
                if (openingScreenToDraw==Sprite.titleScreen) {
                    openingScreenToDraw=Sprite.titleScreen2;
                }
                else {
                    openingScreenToDraw=Sprite.titleScreen;
                }
            }

            if (keyboard.keysPressed[10]) {
                room=2;
                counter=0;
            }
        }
    }

    if (room==2) {
        if (++counter>=60) {
            counter=0;
            time--;
        }
        keyboard.update();
        for (int i=0; i<keyboard.keys.length; i++) {
            if (keyboard.keysPressed[i]) {
                System.out.println("Key "+i+" Pressed");
            }
        }
        int[] returned=generator.update((int)frog.x, (int)frog.y);
        int fliesToEat=returned[0];
        int chestsToCollect=returned[1];
        score+=fliesToEat*10+chestsToCollect*100;

        frog.update(sideCollisions, verticalCollisions, fliesToEat);
        healthbar.update(frog.hunger, frog.breath, (int)(frog.jumpCharge*100)-40);
        draw.update(((int)frog.x+(frog.WIDTH+frog.BLANK_LEFT)/2)*-1+WIDTH/2, ((int)frog.y+(frog.HEIGHT+frog.BLANK_TOP)/2)*-1+HEIGHT/2);
        sideCollisions=generator.getSideCollisions();
        verticalCollisions=generator.getVerticalCollisions();

        if (frog.hunger<=0) {
            room=3;
            counter=0;
            lastScore=score;
            lastTimeAlive=60-time;
            score=0;
            time=60;
            frog=new Frog(0, 1632, 0.01, .98, .94, .94, WATER_LEVEL, keyboard);
            generator=new Generator(WATER_LEVEL);
            healthbar=new Healthbar(frog.MAX_HUNGER, frog.MAX_BREATH, (int)(frog.MAX_JUMP_CHARGE*100)-40);
        }
        if (frog.breath<=0) {
            room=4;
            counter=0;
            lastScore=score;
            lastTimeAlive=60-time;
            score=0;
            time=60;
            frog=new Frog(0, 1632, 0.01, .98, .94, .94, WATER_LEVEL, keyboard);
            generator=new Generator(WATER_LEVEL);
            healthbar=new Healthbar(frog.MAX_HUNGER, frog.MAX_BREATH, (int)(frog.MAX_JUMP_CHARGE*100)-40);
        }
        if (time<=0) {
            room=5;
            counter=0;
            lastScore=score;
            lastTimeAlive=60-time;
            score=0;
            time=60;
            frog=new Frog(0, 1632, 0.01, .98, .94, .94, WATER_LEVEL, keyboard);
            generator=new Generator(WATER_LEVEL);
            healthbar=new Healthbar(frog.MAX_HUNGER, frog.MAX_BREATH, (int)(frog.MAX_JUMP_CHARGE*100)-40);
        }
    }

    if (room==3) {
        keyboard.update();
        if (keyboard.keysPressed[10]) {
            room=1;
        }
    }
    if (room==4) {
        keyboard.update();
        if (keyboard.keysPressed[10]) {
            room=1;
        }
    }
    if (room==5) {
        keyboard.update();
        if (keyboard.keysPressed[10]) {
            room=1;
        }
    }
    if (room==6) {
        keyboard.update();
        if (keyboard.keysPressed[10]) {
            room=1;
        }
    }

}

private void render() {
    BufferStrategy bs=getBufferStrategy();
    if (bs==null) {
        createBufferStrategy(3);
        return;
    }

    for (int i=0; i<pixels.length; i++) {//sets the background color to white so that the clouds don't have holes in them
        pixels[i]=-1;
    }

    if (room==0) {
        draw.drawSpriteToScreen(0, 0, openingScreenToDraw);
    }

    if (room==1) {
        draw.drawSpriteToScreen(0, 0, openingScreenToDraw);
    }

    if (room==2) {
        draw.drawSpriteToScreen(0, Math.min(0, -1*(int)frog.y+WATER_LEVEL-HEIGHT/2-2), Sprite.sky);
        draw.drawSpriteToScreen(0, Math.max(0, -1*(int)frog.y+HEIGHT+WATER_LEVEL-HEIGHT/2-2), Sprite.water);

        frog.drawSelf(draw);
        generator.drawBlocks(draw);
        healthbar.drawSelf(draw, score, time);
    }
    if (room==3) {
        draw.drawSpriteToScreen(0, 0, Sprite.youStarved);
        draw.drawNumberToScreen(80, 64, lastScore);
        draw.drawNumberToScreen(117, 79, lastTimeAlive);
    }
    if (room==4) {
        draw.drawSpriteToScreen(0, 0, Sprite.youDrowned);
        draw.drawNumberToScreen(80, 64, lastScore);
        draw.drawNumberToScreen(117, 79, lastTimeAlive);
    }
    if (room==5) {
        draw.drawSpriteToScreen(0, 0, Sprite.outOfTime);
        draw.drawNumberToScreen(80, 64, lastScore);
        draw.drawNumberToScreen(117, 79, lastTimeAlive);
    }
    if (room==6) {
        draw.drawSpriteToScreen(0, 0, Sprite.youWereEaten);
        draw.drawNumberToScreen(80, 64, lastScore);
        draw.drawNumberToScreen(117, 79, lastTimeAlive);
    }

    Graphics g=bs.getDrawGraphics();
    g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
    g.dispose();
    bs.show();
}

private synchronized void start() {
    running=true;
    thread=new Thread(this, "Under");
    thread.start();
}

private synchronized void stop() {
    running=false;
    try {
        thread.join();
    }
    catch (InterruptedException e) {
        e.printStackTrace();
    }
}

public void run() {
    long lastNanoTime=System.nanoTime();
    long lastMilliTime=System.currentTimeMillis();
    updates=0;
    frames=0;
    requestFocus();

    while (running) {
        long currentNanoTime=System.nanoTime();
        while (currentNanoTime-lastNanoTime>=TIME_BETWEEN_UPDATES) {
            lastNanoTime+=TIME_BETWEEN_UPDATES;
            update();
            updates++;
        }
        render();
        frames++;
        while (lastMilliTime+1000<System.currentTimeMillis()) {
            lastMilliTime+=1000;
            frame.setTitle("Under           |        FPS: "+frames+"  Updates: "+updates);
            updates=0;
            frames=0;
        }
    }
    stop();
}

}
package com.wierdogames.Under.main;
导入java.awt.Canvas;
导入java.awt.Dimension;
导入java.awt.Graphics;
导入java.awt.image.BufferStrategy;
导入java.awt.image.buffereImage;
导入java.awt.image.DataBufferInt;
导入java.util.Random;
导入javax.swing.JFrame;
导入com.wierdogames.Under.graphics.Draw;
导入com.wierdogames.Under.graphics.Sprite;
导入com.wierdogames.Under.graphics.SpriteSheet;
导入com.wierdogames.Under.input.Keyboard;
导入com.wierdogames.Under.mobs.Frog;
导入com.wierdogames.Under.mobs.Healthbar;
公共类Main扩展画布实现Runnable{
私有静态最终长serialVersionUID=1L;
公共静态最终整数宽度=300;
公共静态最终内部高度=宽度*9/16;
公共静态最终整数比例=3;
私有JFrame;
私有布尔运行=false;
私有线程;
私人抽签;
专用键盘;
私有int帧;
私有int更新;
私人最终长时间更新间隔=100000000/60;
BuffereImage=新的BuffereImage(宽度、高度、BuffereImage.TYPE_INT_RGB);
int[]像素=((DataBufferInt)image.getRaster().getDataBuffer()).getData();
青蛙;
私有int[]侧碰撞=新int[0];
私有int[]垂直碰撞=新int[0];
私人最终内部水位=1600;
私人发电机;
私人健康酒吧;
私人智力得分=0;
私人整数时间=60;
私人int lastScore=0;
private int lastTimeAlive=0;
私人室内=0;
专用整数计数器=0;
私有精灵openingScreenToDraw=新精灵(1,1300,精灵表背景);
随机=新随机();
公共静态void main(字符串[]args){
主游戏=新主游戏();
game.frame.setresizeable(false);
game.frame.setTitle(“在| FPS:---更新:-”下);
game.frame.add(游戏);
game.frame.pack();
game.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
game.frame.setLocationRelativeTo(空);
game.frame.setVisible(true);
game.start();
}
专用干管(){
frame=新的JFrame();
尺寸尺寸=新尺寸(宽度*比例,高度*比例);
frame.setPreferredSize(大小);
键盘=新键盘();
addKeyListener(键盘);
绘制=新绘制(宽度、高度、像素);
青蛙=新青蛙(0,1632,0.01,98,94,94,水位,键盘);
发电机=新发电机(水位);
healthbar=新的healthbar(frog.MAX_饥饿,frog.MAX_呼吸,(int)(frog.MAX_跳跃,充电*100)-40);
}
私有void更新(){
如果(房间==0){
如果(++计数器>300){
房间=1;
计数器=-60;
openingScreenToDraw=Sprite.titleScreen;
}
否则{
如果(计数器>120和计数器40){
计数器=0;
if(openingScreenToDraw==Sprite.titleScreen){
openingScreenToDraw=Sprite.titleScreen2;
}
否则{
openingScreenToDraw=Sprite.titleScreen;
}
}
如果(按键盘键[10]){
房间=2间;
计数器=0;
}
}
}
如果(房间==2){
如果(++计数器>=60){
计数器=0;
时间--;
}
keyboard.update();

对于(inti=0;i您是否在运行配置中选择了主类

运行>运行配置>主类>选择主类。
接下来再次清理并构建。然后在项目的dist文件夹中打开jar文件。

是否在运行配置中选择了主类

运行>运行配置>主类>选择主类。
接下来再次清理并构建。然后在项目的dist文件夹中打开jar文件。

是否在运行配置中选择了主类

运行>运行配置>主类>选择主类。
接下来再次清理并构建。然后在项目的dist文件夹中打开jar文件。

是否在运行配置中选择了主类

运行>运行配置>主类>选择主类。
下一步清理并再次构建。然后在项目的dist文件夹中打开jar文件。

引发的异常是:

Exception in thread "main" java.lang.ExceptionInInitializerError
        at com.wierd0games.Under.graphics.Sprite.<clinit>(Sprite.java:13)
        at com.wierd0games.Under.main.Main.<init>(Main.java:53)
        at com.wierd0games.Under.main.Main.main(Main.java:57)
Caused by: java.lang.IllegalArgumentException: input == null!
        at javax.imageio.ImageIO.read(ImageIO.java:1388)
        at com.wierd0games.Under.graphics.SpriteSheet.load(SpriteSheet.java:27)
        at com.wierd0games.Under.graphics.SpriteSheet.<init>(SpriteSheet.java:22)
        at com.wierd0games.Under.graphics.SpriteSheet.<clinit>(SpriteSheet.java:13)
        ... 3 more
线程“main”java.lang.ExceptionInInitializeError中的异常 在com.wierdogames.Under.graphics.Sprite.(Sprite.java:13) 在com.wierdogames.Under.main.main.(main.java:53) 在com.wierdogames.Under.main.main(main.java:57)上 原因:java.lang.IllegalArgumentException:input==null! 在javax.imageio.imageio.read(imageio.java:1388) 在com.wierdogames.Under.graphics.SpriteSheet.load(SpriteSheet.java:27)上 在com.wierdogames.Under.graphics.SpriteSheet.(SpriteSheet.java:22) 在com.wierdogames.Under.graphics.SpriteSheet.(SpriteSheet.java:13) …还有3个

如果在命令行的LD.jar下使用
java-jar运行jar,您可以看到异常。

引发的异常是:

Exception in thread "main" java.lang.ExceptionInInitializerError
        at com.wierd0games.Under.graphics.Sprite.<clinit>(Sprite.java:13)
        at com.wierd0games.Under.main.Main.<init>(Main.java:53)
        at com.wierd0games.Under.main.Main.main(Main.java:57)
Caused by: java.lang.IllegalArgumentException: input == null!
        at javax.imageio.ImageIO.read(ImageIO.java:1388)
        at com.wierd0games.Under.graphics.SpriteSheet.load(SpriteSheet.java:27)
        at com.wierd0games.Under.graphics.SpriteSheet.<init>(SpriteSheet.java:22)
        at com.wierd0games.Under.graphics.SpriteSheet.<clinit>(SpriteSheet.java:13)
        ... 3 more
线程“main”java.lang.ExceptionInInitializeError中的异常 在com.wierdogames.Under.graphics.Sprite.(Sprite.java:13) 在com.wierdogames.Under.main上。