Проблема с запуском jar-файла в windows10 - PullRequest
0 голосов
/ 10 октября 2019

У меня есть проект Java, который я преобразовал в файл JAR. А позже мой проект на C # использует этот jar-файл с этим кодом

proc = new Process();
            proc.StartInfo.WorkingDirectory = jarDir;
            Console.WriteLine("\nDirectory with jar file is\n" + jarDir);
            proc.StartInfo.FileName = jarName;
            Console.WriteLine("\npassed arguments are" + ifs_id.ToString() + " " + max_record.ToString() + " " + max_time.ToString() +
                " " + outputName + " " + outputDir);
            proc.StartInfo.Arguments = " " + ifs_id.ToString() + " " + max_record.ToString() + " " + max_time.ToString() +
                " " + outputName + " " + outputDir;
            proc.EnableRaisingEvents = true;
            proc.Exited += new EventHandler(OnProcessExit);
            proc.Start();

И все работало идеально. Проблема начинается, когда я перенес свой проект на другой компьютер, также работающий под Windows10. Это дошло до работы. Процесс начинается и сразу заканчивается. Более того, я не могу запустить файл JAR, дважды щелкнув по нему, и я думаю, что это может быть так. При разработке кода все работает отлично. Но когда я преобразовал проект в файл .jar, он перестает работать.

Это не проблема с каталогами, я дважды проверил их.

Я понятия не имею, что может быть причиной этой ситуации. Буду очень признателен за любые советы.

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Ваш код: proc.StartInfo.FileName = jarName; говорит Windows запускать файл .jar со всем, что он связывает в качестве обработчика для jarfiles. Это так же, как двойной щелчок.

Так что тот факт, что оба метода не работают, означает, что среда выполнения Java в Windows не является зарегистрированным обработчиком jarfile. В зависимости от того, какие версии JRE вы установили, большинство установщиков Open JRE этого не делают. AdoptOpenJDK начал включать опцию обработки jarfile в установщик, как мне кажется, в этом году (?).


Option 1

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

С другой стороны, это также исправит двойной щелчок по банке,что-то, чего не делает Вариант 2 ниже.

У вас есть несколько вариантов сделать это:

  • Используйте установщик JRE / JDK, который сделает это за вас (например, ). Установщик AdoptOpenJDK ).
  • Сделайте это вручную. Этот конкретный ответ (не тот, который помечен как принято ) должен работать.
  • Если вы не против запуска стороннего инструмента, созданного случайным незнакомцем нав Интернете jarfix будет автоматизировать ручной способ выше.

Option 2

Заставить вашу программу запускать Java, даже если она в настоящее время не связана с jarfiles,Это, вероятно, заставит его работать на большем количестве компьютеров, но не решит проблему двойного щелчка jar.

Это требует, чтобы Java уже была установлена ​​и находилась в PATH вашей ОС. Чтобы проверить это, запустите командную строку и запустите java -version. Если вы получили ответ, продолжайте читать. Если вы этого не сделаете, вам нужно посмотреть, как включить Java в вашу PATH.

Теперь, в вашем StartInfo, вы хотите вызывать java, а не свой jarfile напрямую:

proc.StartInfo.FileName = "java";

Затем вы указываете свой jar как часть аргумента:

proc.StartInfo.Arguments = " -jar " + jarName + " " + ...the rest of your args.

Вы можете заменить "java" на "javaw", если знаете, что когда-либо запускаете его только в Windows.

1 голос
/ 10 октября 2019

Проверьте следующее:

  1. .jar-файл, вызываемый вашей программой, находится на компьютере, на который вы переместили программу? Вы не можете использовать этот класс Process, если вам нужен доступ к файлу .jar с удаленного сервера.

  2. Когда вы говорите, что он «перестает работать», он вообще выдает ошибку?

  3. Вы проверяли, установлена ​​ли java на компьютере, на который вы переместили программу (запустите java -version в командной строке)?

...