Java 当尝试将项目导出为JAR时,文件在启动时立即被视为已损坏

Java 当尝试将项目导出为JAR时,文件在启动时立即被视为已损坏,java,jar,export,executable,Java,Jar,Export,Executable,我对Java的导出有问题。当我启动我在Eclipse中创建的JAR文件时,它立即给我一个错误,如下所示: 错误:无效或损坏的jar文件C:\Users\Samuel\Desktop\Deep Dungeons.jar 我的代码如下: import java.util.*; public class Main { public static void main(String[] args) { // System Objects Scanner in =

我对Java的导出有问题。当我启动我在Eclipse中创建的JAR文件时,它立即给我一个错误,如下所示:

错误:无效或损坏的jar文件C:\Users\Samuel\Desktop\Deep Dungeons.jar

我的代码如下:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // System Objects
        Scanner in = new Scanner(System.in);
        Random rand = new Random();

    // Game variables
    String[] enemies = {"Skeleton" , "Zombie", "Warrior", "Assassin"};
    int maxEnemyHealth = 75;
    int enemyAttackDamage = 25;

    // Player Variables
    int health = 100;
    int attackDamage = 50;
    int numHealthPotions = 5;
    int healthPotionHealAmount = 30;
    int healthPotionDropChance = 50; // Percentage
    int enemiesKilled = 0;
    int maxHealth = 100;

    boolean running = true;

    System.out.println("Welcome to the Dungeon!");

    GAME:
        while(running) {
            System.out.println("--------------------------------------");

            int enemyHealth = rand.nextInt(maxEnemyHealth);
            String enemy = enemies[rand.nextInt(enemies.length)];
            System.out.println("\t# " + enemy + " has appeared! #\n");

            while(enemyHealth > 0) {
                System.out.println("\t Your HP: " + health);
                System.out.println("\t " + enemy + "'s HP: " + enemyHealth);
                System.out.println("\n\tWhat would you like to do?");
                System.out.println("\t1. Attack");
                System.out.println("\t2. Drink health potion");
                System.out.println("\t3. Run!");

                String input = in.nextLine();
                if(input.equals("1")) {
                    int damageDealt = rand.nextInt(attackDamage);
                    int damageTaken = rand.nextInt(enemyAttackDamage);

                    enemyHealth -= damageDealt;
                    health -= damageTaken;

                    System.out.println("\t> You strike the " + enemy + " for " + damageDealt +  " damage");
                    System.out.println("\t> You recieve " + damageTaken + " in retaliation!");

                    if (health < 1) {
                        System.out.println("\t You have taken too much damage, you are to weak to go on!");
                        break;
                    }
                } else if(input.equals("2")) {
                    if (numHealthPotions > 0) {
                        health += healthPotionHealAmount;
                        if (health > maxHealth)
                            health = 100;
                        numHealthPotions --;
                        System.out.println("\t> You drink a health potion, healing yourself for " + healthPotionHealAmount + "."
                                         + "\n\t> You now have " + health + " HP."
                                         + "\n\t> You now have " + numHealthPotions + "health potions left.\n");
                    } else {
                        System.out.println("\t> You have no health potions left! Defeat enemies for a chance to get one!\n");
                    }
                } else if(input.equals("3")) {
                    System.out.println("\tYou run away from the " + enemy + "!");
                    continue GAME;
                } else {
                    System.out.println("\nInvalid command!");
                }
            }

            if (health < 1) {
                System.out.println("You limp out of the dungeon, weak from battle.");
                System.out.println("You killed " + enemiesKilled + ".");
                break;
            }

            System.out.println("--------------------------------------");
            System.out.println(" # " + enemy + " was defeated! # ");
            enemiesKilled ++;
            System.out.println(" # You have " + health + " HP left #");
            if(rand.nextInt(100) > healthPotionDropChance) {
                numHealthPotions ++;
                System.out.println(" # The enemy dropped a health potion! # ");
                System.out.println(" # You have " + numHealthPotions + " health potion(s). # ");

            }
            System.out.println("--------------------------------------");
            System.out.println("What would you like to do now?");
            System.out.println("1. Continue fighting");
            System.out.println("2. Exit dungeon");

            String input = in.nextLine();

            while(!input.equals("1") && !input.equals("2")) {
                System.out.println("Invalid command!");
                input = in.nextLine();
            }

            if (input.equals("1")) {
                System.out.println("You continue on your adventure!");
            } else if(input.equals("2")) {
                System.out.println("You exit the dungeon, successful from your adventures!");
                System.out.println("You killed " + enemiesKilled + "!");
                break;
            }
        }

    System.out.println("######################");
    System.out.println("# THANKS FOR PLAYING #");
    System.out.println("######################");
}
}

我解决了这个问题。在导出时,我应该尝试将其导出为可运行的jar文件,而不是常规的jar文件。

您已经提供了足够的信息。1损坏的JAR文件是您刚才导出的文件吗?2.你是如何出口的?3当您将JAR放在类路径上时,您是否使用了正确的JAR路径名?值得一提的是,您的源代码与问题无关。这与您如何创建或使用JAR文件有关,或者与两者之间发生的事情有关。@stephen-c我发现了问题所在,我以错误的类型导出了JAR文件。