2016-11-12 5 views
2

를 작동하지 않는 나는이자바 런타임 간부 인()

if (Program.isPlatformLinux()) 
{ 
    exec = "/bin/bash -c xdg-open \"" + file.getAbsolutePath() + "\""; 
    exec2 = "xdg-open \"" + file.getAbsolutePath() + "\""; 
    System.out.println(exec); 
} 
else 
{ 
    //other code 
} 
Runtime.getRuntime().exec(exec); 
Runtime.getRuntime().exec(exec2); 

같은 java를 통해 쉘 명령을 실행하려고하지만 아무것도 전혀 발생하지 않습니다. 이 코드를 실행하면 /bin/bash -c xdg-open "/home/user/Desktop/file.txt"이 콘솔에 인쇄되지만 파일은 열리지 않습니다. bash를 먼저 호출 한 다음 xdg-open - 명령을 호출하려고 시도했지만 변경되지 않았습니다.

무엇이 문제이며 어떻게 해결할 수 있습니까?

편집 :

XDG 오픈 "A- 싶게 B의/홈/사용자/데스크탑/파일/einf/allg FIL/ref.txt" XDG : 호출의 출력은 다음과 같습니다 - 오픈 :

'에서'예상치 못한 인수 그러나 이것은 나에게 매우 이상한 seeems - 왜 in도 전체 경로 이전 명령 seperatet 따옴표로 설정되어 있습니까?

+1

프로세스 출력을 [이 질문에 표시] (http://stackoverflow.com/questions/3936023/printing-runtime-exec-outputstream-to-console)로 인쇄하여 오류가 있는지 확인하십시오. 어쩌면 좀 더 구체적인 오류가 생길 수 있습니다. – BackSlash

+0

@BackSlash 귀하의 조언에 따라이 결과를 원래 게시물에 추가했습니다. – FlashTek

+0

* "einf in a- und b"* 공백이 포함 된 폴더 이름입니까? –

답변

2

이렇게하려면 xdg-open이 필요하지 않습니다. 표준 접근 방식은 여전히 ​​문제를 제공하는 경우는 호출하지 않습니다 Runtime.exec 때문에 배열로 매개 변수를 전달할 수 있습니다,

if(Desktop.isDesktopSupported()) { 
    Desktop.open("/path/to/file.txt"); 
} 

업데이트

: 당신은 자바 플랫폼에 독립적 Desktop API를 사용할 수 있습니다 셸이므로 인용 또는 이스케이프를 지원하거나 허용하지 않습니다.

String program; 
if (Program.isPlatformLinux()) 
{ 
    program = "xdg-open"; 
} else { 
    program = "something else"; 
} 

Runtime.getRuntime().exec(new String[]{program, file.getAbsolutePath()}); 
+0

이것은 나의 첫 번째 승인이었다. 하지만 작동하지 않는 것 같습니다 : xdg-open/home/user/Desktop/files/einf \ in \ a- \ und \ b/allg \ fil/ref.txt xdg-open : '' – FlashTek

+0

백 슬래시를 벗어나야합니다. 대답을 다시 확인하십시오. – BackSlash

+0

'Desktop' 클래스를 사용할 수 없습니다. 일부 장치에서 전체 응용 프로그램을 중단시키는 것 같습니다 (http://stackoverflow.com/questions/40554515/java-swing-desktop-open-causes-gtk- 오류) – FlashTek