| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Запуск bat файла с аргументами |
| Автор: garbuz 12.1.2009, 00:10 | ||
Запускаю из приложения бат файл
Бат файл запускает другое java-приложение, которому нужно в качестве аргумента передать строку message. Как? ЗЫ. По форуму искал, возможно плохо |
| Автор: Temdegon 12.1.2009, 01:58 | ||||
| В командный файл вроди бы параметры передаются обычно через пробел: "myBat.bat param1 param2" И принимаются в %номер_параметра в самом файле
а в фале этот параметр будет переменной %1, если я не ошибаюсь === Хотя, нифига, наверное получится два параметра, т.к. в строке есть пробел. может прокатит строку в кавычки или в апострафы взять, чтоб она в один параметр попала === Проверил, что бы не разбивалась по пробелам надо в двойные кавычки заключить переменную: Process proc = rt.exec("C:/run.bat" + " \"" + message + "\""); тогда бат-файл
выведет Hello Vingrad! |
| Автор: javaman 12.1.2009, 07:45 |
| Там же есть еще один метод http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Runtime.html#exec(java.lang.String%5B%5D) с массивом String[]. Первым элементом массива будет комманда, а далее идут её аргументы. |
| Автор: MisterCleric 12.1.2009, 10:36 |
| а почему нельзя напрямую вызвать то java-приложение? Наверняка это jar, а в нем есть main-class, который и принимает эти параметры. А то у тебя под виндой-то будет работать bat, а под остальными осями... |
| Автор: garbuz 12.1.2009, 10:42 |
| Всем спасибо, позже попробую различные варианты MisterCleric, не, пока джара для запуска нет |
| Автор: MisterCleric 12.1.2009, 10:50 |
| Подключаешь этот jar в classpath своего приложения. Находишь в его манифесте директиву Main-Class. Создаешь его инстанс вызываешь метод main этого объекта этого класса со своими параметрами. Можно, например еще этот вызов обернуть в отдельный поток да еще с атрибутом setDaemon(true) и вообще закрыть свое приложение |
| Автор: LSD 12.1.2009, 22:46 |
| Runtime.exec() запускает только приложения, а не текстовые файлы. Для того чтобы выполнить команды которые прописаны в bat файле, надо запустить интерпретатор командных файлов (cmd.exe). И передать ему в качестве параметра имя командного файла который надо выполнить. |
| Автор: garbuz 16.2.2009, 03:43 | ||||||
Возвращаюсь к старой теме Появился jar файл, теперь отпала необходимость использовать промежуточный bat файл. Пытаюсь запустить второе приложение из первого, запуск происходит в сервлете в новом потоке, все jar файлы второго приложения добавил в classpath 1-ого приложения через IDE (идея)
В итоге
Судя по стектрейсу эксепшен кидается где-то на стороне томката, только вот непонятно как это бороть... Джарники-то я добавил в classpath приложения, Импорты сделал, все вроде нормально... |
| Автор: ivg 16.2.2009, 23:27 |
| garbuz, лучше первоначальную постановку задачи укажите. Почему это приложение надо запускать таким образом? Почему не использовать его как библиотеку? Какого приложения? Tomcat'а? А куда именно? |
| Автор: garbuz 16.2.2009, 23:27 |
| Кажется тут нужен отдельный класслоадер... я прав? или же можно без него обойтись? Еще раз скажу, что из веб приложения вызываю приложение, которое разнесено по нескольким джарам, лежащими в файловой системе. Второму приложению нужно передать массив с параметрами. Добавление этих джаров в classpath приложения (добавляю через IDE) не помогает Добавлено через 5 минут и 37 секунд Итак, еще раз. Есть веб приложение, крутится на томкате. Из него мне надо вызвать другое приложение, которое лежит в файловой системе, при этом передать ему массив с параметрами. Второе приложение, что что мне надо запустить, состоит из нескольких джар файлов, которые используют друг друга в процессе работы. Так вот. Делал сперва это через бат файл, потом прочитал что этоизврат запускать джаву из джавы через батник. Решил вызывать напрямую, благо появился джар файл, который можно "запустить". Сейчас эти джарники добавил в класспас моего приложения через IDE, ну т.е. просто в либы добавил, на сервер они не деплоятся, естественно их серверу не найти... Короче вот так. Как лучше поступить? |
| Автор: garbuz 17.2.2009, 00:39 | ||||||
Теперь я не понимаю вас. :(
Пытался вызвать метод main другого приложения, естественно ничего не получилось, потом попробовал через рефлекшн, тоже ничего не вышло.
Попробовал и в либы приложения добавит в WEB-INF, и в папку lib томката, все равно что-то не хочет. |
| Автор: ivg 17.2.2009, 00:52 | ||||||
Что делает метод main(). Разбирает командную строку, и в соответствии с этими параметрами выполняет какие-то действия. Зачем вам "кодировать" эти параметры:
Каждый раз видимо по разному "не хочет". Надо при каждой ошибке анализировать стек-трейс и устранять. |