Я пытаюсь запустить файл .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 (сборка 1.8.0_191-b12) Клиентская виртуальная машина Java HotSpot (TM) (сборка 25.191-b12, смешанный режим, совместное использование)
Вот что я установил на свой Mac: версия java "1.8.0_25" Среда выполнения Java (TM) SE (сборка 1.8.0_25-b17) 64-разрядная серверная виртуальная машина Java HotSpot (TM) (сборка 25.25-b02, смешанный режим)
Пожалуйста помоги! Я искал в Интернете последние 3 часа, пытаясь найти исправление.
Вы можете скачать файл .jar здесь
На изображениях ниже представлены более подробные сведения об аргументах, которые можно изменить. Обратите внимание, что я переименовал файл в MC.jar. Подробная информация о файле .jarПолный список параметров
Я сделал файл доступным. Мне удалось изменить аргументы из командной строки (на моем Mac), поэтому я не думаю, что есть проблема с кодом. Может мне нужно что-то установить на свой ПК?
«Файл содержит инструкции по изменению каждого параметра» - было бы полезно, если бы вы также предоставили эти инструкции
Возникла ли такая же проблема на вашем Mac?
Нет, на Mac это работает так, как задумано.
Кажется, проблема связана с кодом. Пожалуйста, проверьте мой ответ.




Есть две возможные причины / случаи:
Свойства не передаются в приложение (что вы, насколько я понимаю, сомневаетесь)
В коде есть некоторые внешние события, которые выполняются только в том случае, если параметр действительно передан правильно.
Если jar создан правильно, метод передачи аргументов правильный, можете быть уверены в этом.
Чтобы проверить себя и попрактиковаться (и я понимаю, что это вопрос «студента»), вы можете распечатать массив while args в цикле прямо в методе main:
public static void main(String [] args) {
for(String arg : args) {
System.out.println(arg);
}
// now do your logic here
}
Скорее всего, вы увидите, что параметры печатаются правильно.
Так что это, вероятно, второй случай, когда вам придется отлаживать и проверять, что там происходит.
Спасибо за предложение, Марк. Это могло бы сработать, однако, учитывая мое незнание программирования на Java, отладка этого была бы похожа на попытку читать по-китайски.
Если у меня будет достаточно времени, я не сомневаюсь в этом. У меня плотный график с этим, и я хотел бы, чтобы он заработал сегодня. Меня больше интересуют данные, получаемые из этого файла, чем сам код.
Проблема, похоже, заключается в том, как он создает выходной каталог.
Вот фрагмент декомпилированного кода файла jar,
Независимо от ОС, переменная path получает значение, в котором в качестве разделителя используется символ «/».
Например: путь = /C:/mydir/MC.jar
Поскольку File.separator - это '\' в Windows, он пытается создать подстроку, используя '\', что приводит к исключению в строке 113, так как он не может найти ни одного вхождения '\' в пути.
Таким образом, Нижняя линия: файл jar будет запускаться с параметрами только в Mac / Linux, если в код не было внесено никаких изменений.
здесь что-то не так, "getPath" возвращает путь с разделителем "\" (т.е. обратной косой чертой) в окнах
Спасибо, что дошли до сути. Я не смогу изменить код сегодня, так как мне действительно нужно научиться кодировать на Java. Но, безусловно, полезно знать, что мне делать, когда придет время.
@mangusta Я запускал getPath () в окнах и получил "/" в окнах.
"getLocation" здесь вышло из-под моего внимания. Он возвращает объект «URL», а «getPath», вызываемый для URL, будет содержать только косые черты, независимо от того, какая ОС. "getPath", вызываемый объектом File, будет содержать косые и обратные косые черты в зависимости от ОС.
Покажи нам свой код! Если вы не можете его изменить, вы не можете изменить способ обработки аргументов командной строки.