Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> javaws command line 
:(
    Опции темы
PashaOvechkin
Дата 19.3.2009, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

Репутация: 2
Всего: 4



Привет всем!
Мне необходимо передавать параметры в мейн метод, запуская ето через ЙНЛП.
Генерю строку и запускаю 

Код

ProcessBuilder pb = new ProcessBuilder( "javaws", "-open", params, JNLP_URL );


Реально строка выглядит так-> 
"javaws -open first,second,third  http://mybest.url.com/my.jnlp"

В но в спецификации сказано что параметры должны передаватся 
так -> 
"javaws -open first second third  http://mybest.url.com/my.jnlp"
т.и не через запятую одним стрингом, а по нормальному, как и принято к командной строке.
Первый вариант у меня работает. Получаю все параметры в первом (т.и в нулевом) и сплитером разделяю их.

Может кто нить знает как сделать правильно? 
Откровенно говоря похоже на буг :\


Это сообщение отредактировал(а) PashaOvechkin - 19.3.2009, 13:40
PM MAIL Skype   Вверх
LSD
Дата 19.3.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(PashaOvechkin @  19.3.2009,  13:35 Найти цитируемый пост)
Откровенно говоря похоже на буг :\

Ты просто неправильно передаешь параметры в vararg метод.

Или params передавай не в массиве, а по одному. Или создай новый массив куда скопируй "javaws", "-open", params и JNLP_URL.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
PashaOvechkin
Дата 19.3.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

Репутация: 2
Всего: 4



Стоп стоп стоп...
забудем об етом ->
Код

ProcessBuilder pb = new ProcessBuilder( "javaws", "-open", params, JNLP_URL );


Есть строка "javaws -open first,second,third  http://mybest.url.com/my.jnlp"
если из кода 

Код

 public static void main(String[] args) {
        
               String a = args[0]; //                    

    }


то всё ок, и можно сплитить по ","

Если же строка = "javaws -open first second third  http://mybest.url.com/my.jnlp"
Код

public static void main(String[] args) {
        
               String a = args[1]; //   null pointer there     


Это сообщение отредактировал(а) PashaOvechkin - 19.3.2009, 13:54
PM MAIL Skype   Вверх
LSD
Дата 19.3.2009, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Вообще нифига не понятно. Опиши чётко, что есть на входе и что надо получить на выходе.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
PashaOvechkin
Дата 19.3.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

Репутация: 2
Всего: 4



Боже... Нужно передать параметры в мейн метод, вызывая его веб стартом.

Используя командную строку.


у javaws есть команда -open, кототая способна ети параметры передать.

По всем правилам параметры передаются так -> "javaws http://mybest.url.com/my.jnlp -open first second third"

но таким образом я получаю лиш первый параметр.
И поетому придумал решение "javaws http://mybest.url.com/my.jnlp -open first,second,third"

т.и все пара,етры передаются в одном, в первом параметре.

А хотелось бы по человечески.

Это сообщение отредактировал(а) PashaOvechkin - 19.3.2009, 15:21
PM MAIL Skype   Вверх
LSD
Дата 19.3.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Заключи параметры в кавычки:
Код

ProcessBuilder builder = new ProcessBuilder("javaws", "http://mybest.url.com/my.jnlp", "-open", "\"first second third\"");



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
PashaOvechkin
Дата 19.3.2009, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

Репутация: 2
Всего: 4



хмм.. Помоему не прокатывало. Но попробую еще раз. Пасиб за совет!

PM MAIL Skype   Вверх
aleksandy
Дата 20.3.2009, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 4
Всего: 5



PashaOvechkin, ты сигнатуру конструктора ProcessBuilder-а видел? Там ожидается массив строк на вход, таким образом твой 
Код

ProcessBuilder pb = new ProcessBuilder( "javaws", "-open", params, JNLP_URL );

нужно записать как-то так
Код

// полагаю что params - это массив или список строк
List<String> argsList = new ArrayList<String>();
argsList.add("javaws");
argsList.add("-open");
for (String param : params) {
  argsList.add(param);
}
argsList.add(JNLP_URL);
String[] args = new String[argsList.size()];
args = argsList.toArray(args);
ProcessBuilder pb = new ProcessBuilder(args);


З.Ы. Если содержимое params заранее известно, то можно сделать так:
Код

String[] args = new String[]{"javaws", "-open", params[i], JNLP_URL};
ProcessBuilder pb = new ProcessBuilder(args);


PM   Вверх
LSD
Дата 20.3.2009, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



aleksandy,
params - это String, если бы params был бы String[] то была бы ошибка компиляции.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
PashaOvechkin
Дата 20.3.2009, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

Репутация: 2
Всего: 4



ProcessBuilder ето последнее что интересует в етой ситуации...
Даже просто запуская через командную строку, 
"javaws http://mybest.url.com/my.jnlp -open first,second,third"

то в результате получаю ->
args[0] = "-open"
args[1] = "first,second,third"
args[2]  nullPointer
.
.
.
Вобщем то параметры передаются, всё ок, но хотелось добится что бы
запуская так -> "javaws http://mybest.url.com/my.jnlp -open first second third"
args[0] = "first"
args[1] = "second"
args[2] = "third"

Если параметры передавать в кавычках, как и советовал ЛСД, то они всё равно (естественно )все прийдут в 
args[1] = "first second third"

Видимо ето и есть единственный верный способ... 


Это сообщение отредактировал(а) PashaOvechkin - 20.3.2009, 12:56
PM MAIL Skype   Вверх
LSD
Дата 20.3.2009, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Возможно javaws позволяет использовать несколько раз параметр -open, т.е.
Код

javaws http://mybest.url.com/my.jnlp -open param1 -open param2 -open param3



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
aleksandy
Дата 3.4.2009, 09:33 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 4
Всего: 5



Цитата(LSD @ 20.3.2009,  11:53)
aleksandy,
params - это String, если бы params был бы String[] то была бы ошибка компиляции.

RTFM, парень
т.е. запись String... и String[] в сигнатуре метода одно...ственны. Разница лишь в том, что если
Код
void m(String[] a){}
, то вызывать его надо ТОЛЬКО ТАК 
Код
m(new String[] {});
, в смысле аргумент может быть только массивом, а если 
Код
void m(String... a){}
, то вызывать его МОЖНО ТАК 
Код
m(new String[] {});
 или так 
Код
m("", "", "")
, т.е. может быть:
1. либо один аргумент в виде массива строк;
2. сколько угодно аргументов типа String.
PM   Вверх
LSD
Дата 3.4.2009, 12:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(aleksandy @  3.4.2009,  09:33 Найти цитируемый пост)
RTFM, парень
...

Прежде чем советовать другим RTFM, неплохо было бы вообще почитать о чем идет речь. И внимательно взглянуть на код.
Код

new ProcessBuilder( "javaws", "-open", params, JNLP_URL );

а теперь объясни как ты передашь в качестве params - String[] и не получишь при этом ошибку компиляции?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
aleksandy
Дата 3.4.2009, 18:23 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 4
Всего: 5



Цитата(LSD @ 3.4.2009,  12:28)
Прежде чем советовать другим RTFM, неплохо было бы вообще почитать о чем идет речь. И внимательно взглянуть на код.
Код

new ProcessBuilder( "javaws", "-open", params, JNLP_URL );

а теперь объясни как ты передашь в качестве params - String[] и не получишь при этом ошибку компиляции?

LSD, чуть выше я все написал, читай внимательнее. Где в предложенном мною варианте ошибка? Укажи, пожалуйста. Согласен, я немного не углядел, что в исходном коде params - это просто строка. Однако, я думаю ни для кого не секрет, что в цикле вида 
Код

for (String param : params) {...}
 под params понимается либо массив, либо итеррируемый объект. Следовательно, искомый цикл можно преобразовать в 
Код

for (String param : params.split(" ")) {...}
 

Это сообщение отредактировал(а) aleksandy - 3.4.2009, 18:27
PM   Вверх
LSD
Дата 3.4.2009, 22:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(aleksandy @  3.4.2009,  18:23 Найти цитируемый пост)
LSD, чуть выше я все написал, читай внимательнее. Где в предложенном мною варианте ошибка? Укажи, пожалуйста. Согласен, я немного не углядел, что в исходном коде params - это просто строка. Однако, я думаю ни для кого не секрет, что в цикле вида

Ошибка в то, что ты читаешь тему по диагонали (к вопросу о внимательном чтении smile ). Вопрос был только о том в какой формате передать параметры, чтобы они правильно дошли до приложения. А вовсе не о том как использовать vararg методы, и уж тем более не о foreach циклах. И я не говорил что ты пишешь неправильно, я говорил, что ты пишешь не по теме вопроса.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0597 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.