2013-11-11 2 views
0

Пытается создать базовую пусковую установку для Java-игры. Я создаю правильную команду для запуска приложения. Когда в пусковой установке запускается следующая команда, пусковая установка закрывается, как ожидалось, но команда не работает, либо она не работает, либо игра запускается и сразу же падает.Аргумент командной строки работает в консоли, сбой изнутри Runtime.getRuntime(). Exec

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

/** 
* 
*/ 
protected void launch(){ 

    currentStatusMsg = "Launching..."; 

    String cmd = "java -jar"; 
    cmd += " -Djava.library.path=\"" +nativesDirectory.getAbsolutePath() + "\""; 
    cmd += " \""+applicationJar.getAbsolutePath() + "\""; 

    System.out.println(cmd); 

    try { 
     Runtime rt = Runtime.getRuntime(); 
     Process pr = rt.exec(cmd); 
     //closeLauncher(); 

     BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream())); 

     String line=null; 

     while((line=input.readLine()) != null) { 
      System.out.println(line); 
     } 

     int exitVal = pr.waitFor(); 
     System.out.println("Exited with error code "+exitVal); 

    } catch(Exception e) { 
     System.out.println(e.toString()); 
     e.printStackTrace(); 
    } 
} 

Я попытался добавить что-то, чтобы прочитать результат, но ничего не печатается.

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

Process pr = Runtime.getRuntime().exec(new String[]{ 
       "java", 
       "-Djava.library.path=\"" +nativesDirectory.getAbsolutePath() + "\"", 
       "-jar", 
       applicationJar.getAbsolutePath()}); 

Update я понял, что закрытие запуска, прежде чем разрешить отладки кода для запуска. Система только печатает: «Выход с кодом ошибки 1»

Наконец-то я смог получить ошибку подпроцесса для печати. В нем говорится:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path

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

ответ

1

java command launcher - это не оболочка. не используйте команды, разделяющие кавычки и пробелы, потому что это не закончится хорошо. поместите каждый аргумент в отдельную строку без какого-либо дополнительного кавычки и используйте метод exec(String[]).

+0

Будут ли обрабатываться кавычки автоматически, так как часто в них есть пробелы. – helion3

+0

Я обновил сообщение. Я использовал 'String []' изначально, но имел тот же результат. – helion3

+0

@BotskoNet - вам нужно всего лишь указать, когда вы используете оболочку, поэтому я указал, что вы должны удалить _all_ кавычки (поэтому путь библиотеки все еще не работает). – jtahlborn

Смежные вопросы