2013-06-08 1 views
1

Как открыть приложения с помощью Runtime.exec() в OS X?Открытые приложения с Runtime.exec() в OS X

мой инструктор сделал дать нам пример того, как сделать это, за исключением того, единственная проблема в том, что он использует Windows, в то время как я использую Mac OS X, вот код, который я настроен так далеко:

public class Runtime_execution{ 
public static void main(String args[]){ 
    Runtime rt = Runtime.getRuntime(); 
    Process proc; 
    try{ 
     if(System.getProperty("os.name").startsWith("Mac OS X")){ 
//    run an OS specific program 
      proc = rt.exec("Contacts"); 
     }else{ 
      proc = rt.exec("gedit"); 
     } 
     System.out.println("Before calling waitFor() method."); 
     proc.waitFor(); // try removing this line 
     System.out.println("After calling waitFor() method."); 
    }catch(Exception e){ 
     System.out.println("Contacts is an unknown command."); 
    } 
} 
} 
// find out what the os name is for Mac OS X 
class Random{ 
public static void main(String args[]){ 
    System.out.println(System.getProperty("os.name")); 
} 
} 

Когда я запускал программу, выход продолжал отображения:

Contacts is an unknown command. 

Как я могу это исправить?

+3

Read (и реализации) * все * рекомендации [Когда Runtime.exec() не будет] (HTTP: //www.javaworld.com/jw-12-2000/jw-1229-traps.html). Это может решить проблему. Если нет, он должен предоставить дополнительную информацию о причине отказа. Затем проигнорируйте, что он ссылается на 'exec' и создает' Process' с помощью 'ProcessBuilder'. Также разбивайте 'String arg' на' String [] args' для учета аргументов, которые сами содержат пробелы. –

+1

Также убедитесь, что команда, которую вы пытаетесь запустить, работает! Попробуйте запустить команду из терминала. Например, ввод «Контакты» в отчетах терминалов: 'команда не найдена'. Однако 'open/Application/Contacts.app' откроет приложение для контактов Mac. –

+0

Это законный вопрос. Это не точный дубликат любого другого потока, и это не «настоящий вопрос» - OP предоставил правильный фрагмент кода и правильные сообщения об ошибках. Ничего в этом вопросе не смутно. Если вы можете - попробуйте помочь ответить на вопрос. Но закрыть этот вопрос не так. Я думаю, что комментарий @Devon_C_Miller частично отвечает на вопрос, можете ли вы разместить его как ответ вместо этого ... – Subhas

ответ

2

В OSX вам необходимо запустить исполняемый файл с помощью командной строки, что и делает Runtime.exec.

Попробуйте это:

rt.exec("/Applications/Contacts.app/Contents/MacOS/Contacts"); 

или вы можете сделать

rt.exec("open /Applications/Contacts.app");