Файл .jar не работает с аргументами - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь запустить файл .jar (с именем MC) в Windows из команды и использую следующий код:

java -jar MC.jar 

Это работает, файл имеет всплывающий пользовательский интерфейс, и я могу вручную изменить некоторые аргументы.

Однако , я хочу запустить этот файл .jar без всплывающего пользовательского интерфейса и установки аргументов через командную строку. Файл поставляется с инструкциями о том, как изменить каждый параметр. Вот пример:

java -jar MC.jar bB 0.004

Когда я пытаюсь запустить это из командной строки, я получаю следующую ошибку:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(Unknown Source)
    at CellSim.main(CellSim.java:113)

Понятия не имею, что происходит не так. Я должен отметить, что не знаю, как кодировать на Java, поэтому я не смотрел на исходный код (это было бы бессмысленно для меня). Мне просто нужно многократно запускать этот файл .jar и использовать вывод из него (много файлов .csv).

Я должен также упомянуть тот же файл .jar, который успешно использовался на Mac и других машинах с Windows, поэтому я думаю, что это что-то особенное для моего ПК.

Это то, что я установил на свой ПК с Windows: Java-версия "1.8.0_191" Java (TM) SE Runtime Environment (сборка 1.8.0_191-b12) Клиентская виртуальная машина Java HotSpot (TM) (сборка 25.191-b12, смешанный режим, совместное использование)

Это то, что я установил на своем Mac: Java-версия "1.8.0_25" Java (TM) SE Runtime Environment (сборка 1.8.0_25-b17) Java HotSpot (TM) 64-разрядная серверная виртуальная машина (сборка 25.25-b02, смешанный режим)

Пожалуйста, помогите! Последние 3 часа я искал в интернете, пытаясь найти решение.

Вы можете скачать .jar файл здесь

На рисунках ниже приведены дополнительные сведения об аргументах, которые можно изменить. Обратите внимание, что я переименовал файл в MC.jar. Подробная информация о файле .jar Полный список параметров

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Проблема, кажется, в том, как он создает выходной каталог.

Вот фрагмент декомпилированного кода файла jar,

decompiled code

Несмотря на ОС, переменная path получает значение, в котором в качестве разделителя используется '/'.

Например: путь = /C:/mydir/MC.jar

Так как File.separator имеет значение «\» в окнах, он пытается подстроку использовать «\», что приводит к исключению в строке 113, поскольку он не может найти вхождения «\» в пути.

Таким образом, нижний итог : файл jar будет работать только с параметрами в Mac / Linux, если в код не было внесено никаких изменений.

0 голосов
/ 04 ноября 2018

Есть две возможные причины / случаи:

  • Свойства не передаются в приложение (что, как я понимаю, вызывает сомнения)

  • В коде происходит нечто внешнее, которое выполняется только в том случае, если параметр действительно передан правильно

Если баночка создана правильно, метод передачи аргументов верен, вы можете быть в этом уверены.

Чтобы проверить себя и попрактиковаться (и я понимаю, что это вопрос «студента»), вы можете напечатать массив while args в цикле прямо в методе main:

public static void main(String [] args) {
    for(String arg : args) {
       System.out.println(arg);
    }  

    // now do your logic here      
}

Скорее всего, вы увидите, что параметры печатаются правильно

Так что, вероятно, это второй случай, когда вам придется отлаживать и проверять, что там происходит

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...