2011-01-18 3 views
3

저는 Java 런타임을 사용하여 외부 프로그램을 실행하는 방법을 모색 해 왔습니다. 예를 들면 다음과 같습니다.자바에서 Mac OS 터미널 명령을 실행하는 방법 (런타임 사용?)

String[] cmd = {"mkdir", "test"}; 
Runtime.getRuntime().exec(cmd); 

예상대로 새 디렉토리를 만듭니다. 이제 맥에서 떠들썩한 파티 창에서 이걸 쓸 수 있습니다 :

love testgame 

폴더라는 testgame의 '사랑'게임 엔진을 실행하려면. 자,이 작품의 이유는 사랑을 실행 가능이라고 부르기 위해 '사랑'의 앨리어싱을했기 때문입니다.

String[] cmd = {"love", "/Users/mtc06/testgame"}; 
Runtime.getRuntime().exec(cmd); 

그리고도 (궁금 사람들을 위해)이 작업을 수행합니다 :이 다음은 하지 작업을 수행하는 이유가 있다는 느낌이

String[] cmd = {"/bin/bash", "love", "/Users/mtc06/testgame"}; 
Runtime.getRuntime().exec(cmd); 

이 일부 자바 바보 같은 짓 중 하나입니다 의심의 여지가 내 일부로, 또는 앨리어싱이 작동하는 방식과 충돌 할 수도 있습니다. 나는 당신의 훌륭한 지성에게 그것을 넘겨 줘요!

UPDATE :이 작동하지 않습니다 중 하나

String[] cmd = {"/bin/sh", "/Applications/love", "/Users/michaelcook/Desktop/Playout"}; 
Runtime.getRuntime().exec(cmd); 

I 받고있어 오류가 런타임에 의해 생성되는 과정에서 127입니다. 내가 연구 할 때마다 '명령을 찾을 수 없습니다'라는 메시지가 나타납니다.

+0

절대 경로를 제공하려고합니다. "사랑" – Erik

+0

고마워요. 이 주사위는 없지만 주사위를 굴리지 않았습니다. 질문 업데이트 중. – mtrc

+0

/Application/love는 정확히 무엇입니까?/bin/sh/Application/love ... 명령 행에서 실제로 작동합니까? – ShiDoiSi

답변

6

실행 파일을 찾는 데 사용되는 경로가 문제가 아닌 것으로 생각됩니다. 당신이 유닉스을 cmd를 경우 OSX 응용 프로그램 또는 유닉스

을 cmd를 사용 (또는 OSX 응용 예 /Applications/AppName.app/Contents/MacOS/AppName의 유닉스 부분을 사용) 경우는 거기에 또한 달려있다 이 문제를 해결하는 두 가지 방법

  1. 실행 파일의 전체 경로를 Java 코드 예
    String[] cmd = {"/full/absolute/path/to/love", "/Users/mtc06/testgame"};

  2. 실행 파일을 포함하도록 경로를 변경하십시오. 이것은 java가 시작된 메소드에 따라 다 (니다.

    a) java가 명령 행에서 실행되면 실행 파일의 디렉토리를 PATH 환경 변수에 추가하십시오.
    b) Java 프로그램이 Finder에서 실행되는 경우 ~/MacOSX/environment.plist에서 경로를 변경해야합니다. 예 : 추가/사용자/마크/빈 앱이 OSX 애플 리케이션 열려 있도록 명령 줄을 사용하여 실행하는 데 필요한이

    open -a love.app "/Users/mtc06/testgame" 
    
    그래서

    자바 인 인 경우

<?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
    <plist version="1.0"> 
    <dict> 
     <key>PATH</key> 
     <string>/Users/mark/bin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:/usr/libexec/binutils:</string> 
    </dict> 
    </plist> 

명령은 (테스트되지 않음)

String[] cmd = {"/usr/bin/open", "-a" , "love.app", "/Users/mtc06/testgame"}; 
+0

이것에 대해 고마워, 나는 한 번 훑어 봤는데, 당신은 즉시 나에게 무엇이 잘못 되었는가를 깨닫게했다. 사랑이 아닌. 위대한 작품, 고마워! – mtrc

관련 문제