Двойной щелчок по файлу JAR не открывает командную строку

Я хочу запустить файл Jar, дважды щелкнув его.

Ниже приведен единственный файл класса Java, присутствующий в нем.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Sysout{
public static void main(String[] args) throws IOException{
    System.out.println("Hello World!");
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String msg = br.readLine();
    System.out.println(msg);
    br.read();
}
}

И в файле манифеста определен основной класс.

Используя эту ссылку, я успешно запустил файл Jar, дважды щелкнув пакетный файл. Это открывает командную строку и запускает определенный основной класс.

Однако, если я дважды щелкну файл Jar напрямую, ничего не произойдет. Я также проверил это ссылку и связал мой .jar с javaw.exe Эта ссылка также предлагает то же самое. Также пытался связать .jar с java.exe

Что происходит, так это то, что командная строка открывается на долю секунды и исчезает.

Даже если я ожидаю, что пользователь введет некоторые данные, операция двойного щелчка не ждет, пока пользователь ничего не введет.

В чем проблема?


person whitehat    schedule 04.05.2012    source источник
comment
Когда вы связываете свой .jar с javaw, он намеренно не показывает окно команд!! свяжите его с java, и вы должны увидеть окно   -  person Petesh    schedule 04.05.2012
comment
@Petesh Можете ли вы добавить этот комментарий в качестве ответа? Я уверен, вы будете вознаграждены.   -  person adarshr    schedule 04.05.2012
comment
Я связался с java.exe. Однако окно отображается только на долю секунды. Пожалуйста, обратитесь к обновленному сообщению   -  person whitehat    schedule 04.05.2012


Ответы (3)


Когда вы используете ассоциацию javaw, она не создает окно команд и поглощает все вызовы System.out и System.err.

Вам следует повторно связать файл .jar с двоичным файлом java, который должен отобразить необходимое командное окно.

Если вы использовали простую опцию Open With..., в командной строке будет пропущена опция -jar.

Откройте командное окно администратора (это необходимо, если вы используете Vista или Windows 7 с включенным UAC) и выполните:

assoc .jar=jarfileterm
ftype jarfileterm="C:\Program Files\Java\jre7\bin\java.exe" -jar "%1" %*

В вашем случае вы должны заменить путь C:\Program Files\Java\jre7\bin\java.exe на путь для вашей установки jre.

Когда вы дважды щелкните после этого, он должен работать правильно.

Вы можете добавить еще один ftype:

ftype jarfile="C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*

снова заменив путь к двоичному файлу javaw на тот, который для вашей системы.

Теперь вы сможете переключаться между оконным и не оконным режимами, поочередно выбирая assoc .jar=jarfileterm и assoc .jar=jarfile.

Если вы хотите сохранить командное окно после запуска .jar, вы окружаете вызов команды java с помощью cmd /s /k, а именно:

ftype jarfileterm=cmd /s /k ""C:\Program Files\Java\jre7\bin\java.exe" -jar "%1" %*"
assoc .jar=jarfileterm

Если эти команды сработали, то двойной щелчок по файлу jar вызовет всплывающее окно команд, которое сохранится.

Вы не можете установить достаточно сложную командную строку с помощью Open With... или Default Programs, которая позволит запустить файл jar. Если вы успешно испробовали все эти усилия команд ftype и assoc, и они все еще не работают, вам нужно будет удалить редактор реестра.

Запустите regedit и найдите ключ с именем .jar под HKEY_CLASSES_ROOT — это должно привести к единственному значению под ним, называемому (Default) со значением, если ваши вызовы команды ftype сработали, тогда оно должно читаться как jarfileterm. Если это не сработало, то вы просматриваете ассоциацию, которая могла быть создана другим приложением (я не знаю, заменяет ли средство обновления Java эти записи, но если да, то проблема может быть в этом)

Затем вам нужно найти этот ключ в файле HKEY_CLASSES_ROOT. Он найдет эту запись, которая должна содержать ключ Shell (т.е. разверните папку jarfileterm, и она должна открыть другую папку Shell), которая содержит ключ Open, который содержит ключ Command, который содержит значение (Default), которое должно содержать команду вызова для запуск файлов .jar. Эта команда должна соответствовать последним введенным вами ftype jarfileterm=... записям. Если это не так, вы должны сделать так, чтобы она соответствовала одной из опций cmd /s /k или "c:\program files\java\jre7\bin\java.exe" (в зависимости от если вы хотите сохранить командное окно в случае ошибки запуска или нет)

person Petesh    schedule 04.05.2012
comment
Я связал jar с java.exe, присутствующим в jre/bin. Однако это открывает командную строку на секунду и исчезает. Я ожидаю ввода данных пользователем с помощью BufferedReader. Таким образом, он должен дождаться некоторого пользовательского ввода, прежде чем просто исчезнуть. - person whitehat; 04.05.2012
comment
если бы вы использовали простую опцию «Открыть с помощью...», то опция -jar была бы отсутствующей, что вызвало бы проблему, с которой вы столкнулись. Я обновлю ответ набором параметров, которые можно использовать из командной строки для правильной настройки. - person Petesh; 04.05.2012
comment
Спасибо за обновление ответа. Я следовал настройке решения как jarfileterm, так и jarfile. Связанный .jar с jarfileterm. Однако это решение не работает :( Та же проблема сохраняется. Командная строка отображается только на долю секунды. - person whitehat; 07.05.2012
comment
Когда вы копируете то, что эквивалентно вызову действия jarfileterm в окно терминала: "c:\program files\java\jre7\bin\java.exe" -jar "c:\users\my account\documents\myjar.jar" оно работает правильно? - person Petesh; 08.05.2012
comment
выполните ftype jarfileterm=cmd /s /k ""C:\Program Files\Java\jre7\bin\java.exe" -jar "%1" %*", затем assoc .jar=jarfileterm, а затем дважды щелкните файл jar - если в результате вызова возникнут какие-либо ошибки, они будут сохранены в окне терминала - person Petesh; 09.05.2012
comment
Сделал это. Но это ничего не меняет. - person whitehat; 09.05.2012
comment
Я собираюсь обновить ответ более подробно об отслеживании проблемы - если после внесения изменения cmd /s /k ftype вы всегда должны видеть окно cmd при двойном щелчке по файлу jar, и оно должно оставаться после того, как команда завершенный. Если вы не столкнулись с ошибкой при выдаче ftype и assoc, то изменение должно было отразиться в ответе на двойной щелчок. - person Petesh; 09.05.2012

Возможно, ваш файл .jar связан с любой другой программой по умолчанию. Щелкните правой кнопкой мыши и откройте с помощью «Java(TM) Platform SE binary». Это должно работать, если у вас есть исполняемый файл jar.

person RP-    schedule 04.05.2012

Я использую JDK, чтобы открыть файл jar в Windows 10.

  1. Откройте regedit → HKEY_CLASSES_ROOT\jarfile\shell\open\command
  2. Измените значение по умолчанию с javaw на java

Например, мой "C:\Program Files\Java\jdk-14.0.1\bin\java.exe" "-jar" "%1"

person Woden    schedule 11.08.2020