Jar-файл не запускается двойным щелчком

1

Я не могу запустить мои файлы.jar. Я прочитал много похожих тем, но до сих пор не могу заставить его работать. Я могу запустить его из строки cmd, если я запустил "java -jar jar_name.jar" из папки, содержащей файл. Я запустил программу Jarfix, которая должна исправить ассоциацию файлов, но она по-прежнему не работает. Когда я экспортирую из Eclipse, он говорит мне

Экспорт JAR завершен с предупреждениями. Подробнее см. Подробнее.... Экспортировано с предупреждениями компиляции: Shutdown/src/Shutdown.java

Из того, что я читал, это не настоящая проблема, это просто означает, что в вашей программе есть предупреждения. Я не думаю, что есть какие-либо проблемы с кодом, но это небольшая программа, поэтому я включил ее в любом случае. Любая помощь приветствуется.

import java.io.IOException;
import java.util.Scanner;

public class Shutdown {

    public static void main(String[] args) throws IOException 
    {
        String os;
        String Win = "Windows";
        String choice;

        os = System.getProperty("os.name");

        if(os.contains(Win))
        {
            System.out.println("Congratulations, you are running "+ os +  ".\nYou now have three options.");
            do
            {
                PrintMenu();
                Scanner keyboard = new Scanner(System.in);
                choice = keyboard.next();
                ReturnMenu(choice);//passes user input as argument to method
            }
            while(choice !="1" || choice != "2" || choice !="3");

        }

        else
            System.out.println("You Are Using A Non-Windows System. Please upgrade.");

    }

    public static void shutdown() throws IOException
    {
        Runtime run = Runtime.getRuntime();
        Process proc = run.exec("shutdown -s -t 0");
    }

    public static void restart() throws IOException
    {
        Runtime run = Runtime.getRuntime();
        Process proc = run.exec("shutdown -r -t 0");
    }

    public static void logoff() throws IOException
    {
        Runtime run = Runtime.getRuntime();
        Process proc = run.exec("shutdown -l");
    }

    public static void PrintMenu()
    {
        System.out.println("Please make a selection:"
                    + "\n1 - Shut down\n2 - Restart\n3 - Log Off\n");

    }

    public static void ReturnMenu(String in) throws IOException, NumberFormatException
    {
        int x;

        try
            {
            x = Integer.parseInt(in);//cast user input to int to be used in switch statement
            }
        catch (NumberFormatException e)//catches non-number input that can't be case to int
            {
            x=4;//caught exception sets x to 4 to cause loop to keep running
            }

        switch (x)
        {
        case 1:
            shutdown();
            break;
        case 2:
            restart();
            break;
        case 3:
            logoff();
            break;
        default:
            System.out.println("Invalid menu selection. Please try again.");
        }

    }
}
  • 0
    Вы уверены, что банка не работает? Возможно, вы просто не видите никакого вывода, так как консоль не отображается. Возможно, вы захотите использовать JOptionPane.showMessageDialog(..) чтобы увидеть некоторые простые выходные данные для проверки этого.
  • 0
    Установлен ли двойной щелчок на нем для запуска с Java? Другими словами, чем это открывается?
Показать ещё 1 комментарий
Теги:
jar

2 ответа

1
 Select your File/Project -- Export -- Runnable JAR -- Select class with main() in 
Launch Configuration -- destination
  • Если вам нужны зависимости для вашего класса в сгенерированном JAR, выберите 1-й вариант (Извлеките необходимые библиотеки в сгенерированный JAR)
  • Если они вам не нужны, а только ваш код, выберите третий вариант (скопируйте необходимые библиотеки в подпапку рядом с созданным JAR)

Надеюсь это поможет :)

0

В Windows стандартная установка Java связывает двойной щелчок файлов.jar с программой javaw.exe, а не java.exe. Разница в том, что у javaw.exe нет консоли (окно команд).

Поскольку у вас нет консоли, у вас нет System.in. У меня не было возможности попробовать это, но я предполагаю, что попытка чтения из System.in приведет к немедленному достижению конца потока, что приведет к тому, что следующие методы * Scanner будут вызывать исключение NoSuchElementException.

Im резюме, вы не можете использовать System.in. Если вы хотите запросить пользователя для ввода, используйте Swing или JavaFX.

Дополнительное примечание. Вы не должны сравнивать строки с использованием == или != В Java, поскольку эти операторы сравнивают ссылки на объекты вместо сравнения значений String. Вместо этого используйте метод equals. Например:

while (!choice.equals("1") && !choice.equals("2") && !choice.equals("3"))

Ещё вопросы

Сообщество Overcoder
Наверх
Меню