2013-07-23 2 views
-4

다른 Java 프로그램 내에서 프로그램을 시작하는 방법에 대한 새로운 소식입니다! 나는 그것을 어떻게 부르는 지 모른다. 첫 번째 질문은 새 스레드 안에서해야한다는 것입니다. 두 번째 질문은 새 프로그램을 호출하는 방법입니다. 내가 전화하기를 원하는 프로그램은 "경이로운 일"입니다. 나는이 프로그램을 실행하기 위해 우분투 12.04를 사용하고 커맨드 라인에는 내가 씁니다. "sudo wondershaper eth0 10000 1000". 일반 프로그램에 어떻게 쓸 수 있습니까? 나는 그것의 비율을 처리하고 싶은 서버가있다! 내가 그것을 사용하는 이유. 그래서 나는 멀티 스레드 서버를 가지고 내가 나에게 보내는 어떤 클라이언트 ReadFile을 읽을 때 코드가 너무Java 프로그램 내에서 외부 프로그램을 시작하는 방법

class Client extends Thread { 
    private Socket connectionSocket; 


    public Client(Socket c) throws IOException { 
     connectionSocket = c; 
    } 

    public void run() { 

     String path = "C:/pao/new2/"; 

     File folder = new File(path); 
     File[] listOfFiles = folder.listFiles(); 


     try { 

      String fileToSendStr = readFile(); 
      File fileToSend = null; 
      for (File f : listOfFiles) 

      {    
       if (f.getName().equals(fileToSendStr)) { 
        fileToSend = f; 
        break; 
       } 
      } 
      //System.out.println("Connescting to Client to recieve the part " +fileToSendStr); 
      if (fileToSend == null) { 

      } 
      System.out.println("Sending the chunk to Client " + fileToSendStr + "to the client: " +connectionSocket.getRemoteSocketAddress().toString()); 
      java.util.Date date= new java.util.Date(); 
      System.out.println(new Timestamp(date.getTime())); 
      long length = fileToSend.length(); 
      byte [] longBytes = new byte[8]; 
      ByteBuffer bbuffer = ByteBuffer.wrap(longBytes); 
      bbuffer.putLong(length); 
      connectionSocket.getOutputStream().write(longBytes); 

      BufferedOutputStream bout = new BufferedOutputStream(connectionSocket.getOutputStream()); 
      BufferedInputStream bain = new BufferedInputStream(new FileInputStream(fileToSend)); 

      byte buffer [] = new byte [1024]; 
      int i = 0; 
      while((i = bain.read(buffer, 0, 1024)) >= 0){ 

       bout.write(buffer, 0, i); 


      } 



      System.out.println("chunk sended"); 
      java.util.Date date1= new java.util.Date(); 
      System.out.println(new Timestamp(date1.getTime())); 
      bout.close(); 
      bain.close(); 


     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 

    private String readFile() throws IOException { 

     BufferedReader r = new BufferedReader(new InputStreamReader(
       connectionSocket.getInputStream())); 
     return r.readLine(); 

    } 
} 

입니다. 이 경우 속도 문자열이 "wondershaper"를 시작하고 "sudo는 wondershaper eth0를 10000 속도"내부의 속도를 넣고 프로그램

+0

나는 100 % 확실하지 않지만 당신은 자바의 프로세스 클래스를 찾고있는 것 같아요. –

+0

관련 질문 : http://stackoverflow.com/questions/3643939/java-process-with-input-output-stream –

+0

감사합니다. 나는 그것을 보지 못했습니다! –

답변

1

Process aProcess = Runtime.getRuntime().exec("cmd");을 시작하면 // 당신도 할 수 있습니다 여기에 모든 프로세스

를 전달할 수 있습니다 이 프로그램의 출력을 읽으십시오.

InputStream is = aProcess.getInputStream(); 

시 : 당신은 인수와 함께, 어떤 과정을 통과 할 수 있지만, >> 같은 2 가지를 통과> 또는 수 없습니다 | 또는 와일드 카드 같은 *

- 의견에서

+0

모든 프로세스를 통과시킬 수는 있지만'>>','2>'또는'|'와 같은 것을 전달할 수는 없습니다. –

+0

예, 런타임 클래스는 배우기 매우 중요하며 콘솔 시나리오를 다루는 많은 경우에 매우 유용합니다 – user2277872

+0

@VitalijZadneprovskij 쉘이 지원하는 경우 패스 할 수 있습니다. – Ankit

관련 문제