2013-07-24 1 views
0

파일이 C:\Users\Infratab Bangalore\Desktop\Rod 디렉토리에 있습니다. 명령 프롬프트에서 다음과 같이 실행했습니다. 정상적으로 작동합니다..exe 파일을 실행하는 동안 문제를 해결하는 방법

C:\Users\Infratab Bangalore\Desktop\Rod>ThMapInfratab1-2.exe TMapInput.txt 

Java 기술을 사용하여 동일한 절차를 수행하고 싶습니다. StackOverFlow 남자들을 사용하여 나는 2 가지 방법으로 시도했다.

사례 1 :

getRuntime() 사용.

import java.util.*; 
    import java.io.*; 
    public class ExeProcess 
{ 
public static void main(String args[]) throws IOException 
{ 
    Runtime rt = Runtime.getRuntime(); 
    File filePath=new File("C:/Users/Infratab Bangalore/Desktop/Rod"); 
    String[] argument1 = {"TMapInput.txt"}; 
    Process proc = rt.exec("ThMapInfratab1-2.exe", argument1, filePath); 
} 
} 

사례 2 : 두 경우 모두 ProcessBuilder

import java.io.File; 
import java.io.IOException; 
public class ProcessBuilderSample { 

public static void main(String args[]) throws IOException 
{ 
    String executable = "ThMapInfratab1-2.exe"; 
    String argument1 = "TherInput.txt"; 
    File workingDirectory = new File("C:/Users/Infratab Bangalore/Desktop/Rod"); 

    ProcessBuilder pb = new ProcessBuilder(executable, argument1); 
    pb.directory(workingDirectory); 
    pb.start();  
} 
} 

사용은

, 나는 다음과 같은 오류를 얻고있다.

오류 :

Exception in thread "main" java.io.IOException: Cannot run program "ThMapInfratab1-2.exe" (in directory "C:\Users\Infratab Bangalore\Desktop\Rod"): CreateProcess error=2, The system cannot find the file specified 
at java.lang.ProcessBuilder.start(Unknown Source) 
at ProcessBuilderSample.main(ProcessBuilderSample.java:16) 
    Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified 
at java.lang.ProcessImpl.create(Native Method) 
at java.lang.ProcessImpl.<init>(Unknown Source) 
at java.lang.ProcessImpl.start(Unknown Source) 
... 2 more 

나는 문제가 무엇을 알아낼 did't. 아무도 나를 제안 할 수 있습니다.

나는 jre 7을 사용하고 있습니다.

감사

+0

경로에 오타가있을 수 있습니까? –

+0

@PhilippSander 나는 또한 다음과 같은 방법으로 노력했다. 1. C : \\ Users \\ Infratab Bangalore \\ Desktop \\ Rod' 2. C : // Users // Infratab Bangalore // Desktop // Rod' –

+0

허먼은 권한 문제와 같은 것 같습니다. 어떤 OS를 사용하고 있습니까? –

답변

4

이 사용하려고 :

pb.directory(workingDirectory); 

만 작업 디렉토리를 지정

import java.io.File; 
import java.io.IOException; 
public class ProcessBuilderSample { 

public static void main(String args[]) throws IOException 
{ 
    String executable = "ThMapInfratab1-2.exe"; 
    String argument1 = "TherInput.txt"; 
    File workingDirectory = new File("C:/Users/Infratab Bangalore/Desktop/Rod"); 

    ProcessBuilder pb = new ProcessBuilder("cmd", "/c","start" ,executable, argument1); 
    pb.directory(workingDirectory); 
    pb.start();  
} 
} 
+0

답변 해 주셔서 감사합니다. 다음 진술의 첫 3 가지 주장을 설명 할 수 있습니까? 'ProcessBuilder pb = new ProcessBuilder ("cmd", "/ c", "start", executable1, argument1); ' –

+0

다음을보십시오 : [cmd/C는 무엇을 의미합니까?] (http://stackoverflow.com/questions/ 515309/what-does-cmd-c-mean) – Gladiator

+0

"시작"에 대해서는 프로그램 제목 일 뿐이라고 생각합니다. – Gladiator

1

문. 이것은 실행 파일 ThMapInfratab1-2.exe이 검색 될 디렉토리가 아닙니다. 그러나이 파일은 인수 TMapInput.txt으로 지정한 파일을 검색 할 디렉토리입니다. TMapInput.txt이 절대 경로가 아니기 때문에, programm는 작업 디렉토리에 상대적인 파일을 검색합니다.

당신이 excecutable의 전체 경로를 지정해야합니다 당신에게 문제를 해결하려면

String executable = "C:\\Users\\Infratab Bangalore\\Desktop\\Rod\\ThMapInfratab1-2.exe"; 
String argument1 = "TherInput.txt"; 
File workingDirectory = new File("C:\\Users\\Infratab Bangalore\\Desktop\\Rod"); 

을 아니면 위치 C:\Users\Infratab Bangalore\Desktop\Rod에 필요하지 않은 경우 너무 파일의 절대 경로를 전달하고 문을 제거 pb.directory(workingDirectory); :

String executable = "C:\\Users\\Infratab Bangalore\\Desktop\\Rod\\ThMapInfratab1-2.exe"; 
String argument1 = "C:\\Users\\Infratab Bangalore\\Desktop\\Rod\\TherInput.txt"; 

은 또한 당신은 위치 C:\Users\Infratab Bangalore\Desktop\Rod을 포함하도록 PATH 환경 변수를 확장 할 수 있습니다. 이 경우 programm는 게시 할 때 잘 실행됩니다.

+0

답변을 주셔서 감사합니다. 내 .exe 파일이 자동으로 적용되기 때문에 어떤 인수도 전달하지 않으려 고합니다. 이를 위해 다음 코드를 시도했다. 그것은 오류를 보여줍니다. –

+0

죄송합니다. 정상적으로 작동합니다. 앞에서 나는 잘못된 길을 언급한다. –

+0

또 한 가지 의심의 여지가 있습니다. 나는 어떤 주장도하지 않으려합니다. 그래서 나는 다음 코드를 썼다.'pb.directory (workingDirectory);를 사용하지 않았기 때문에 작동하지 않는다 내 코드 : 'public static void main (String args []) throws IOException { String executable = " C :/Users/Infratab Bangalore/Desktop/Rod/ThMapInfratab1-2.exe "; // 문자열 argument1 = "TherInput.txt"; // 파일 workingDirectory = 새 파일 ("C :/Users/Infratab Bangalore/Desktop/Rod"); ProcessBuilder pb = 새 ProcessBuilder (실행 가능); // pb.directory (workingDirectory); pb.start(); }'의무적으로 우리는 'directory()를 사용해야한다') –