2016-07-31 9 views
0
String[] command = { "cmd.exe", "/C", "Start", "skype" }; 
Runtime runtime = Runtime.getRuntime(); 
Process process = runtime.exec(command); 

こんにちは、私はjavaでskypeを開始しようとしています!私はこの問題を抱えています: 私は上のコードを使用しています。それは完璧に動作しますが、実行可能なjarファイルにコンパイルすると、javaプロセスがJava全体がクラッシュするまで、無限ループに陥ります。Java実行時にskypeを起動する

問題はこのコード部分にあります。 (私がコメントすると、すべてうまくいくが、Skypeは起動しない)

どこに問題がありますか?

編集*

私はプログラムの小さな例作られた:

メインクラス:

package Client; 

public class DemoMain { 


    public static void main(String[] args) { 
     new Demo(); 
    } 

} 

Processクラス:

package Client; 

import java.io.IOException; 

public class Demo { 


    public Demo(){ 
     try { 
      Runtime.getRuntime().exec(new String[]{ "cmd.exe", "/C", "Start", "skype" }); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

結果:Task Manager view

Eclipseコンパイラでそれは素晴らしい作品! Runnable jarからプログラムを起動するときに問題が発生する

+0

このコードは、そのコマンドを1回実行します。論理的な説明は、このコードの周りの**何か**がループしているということだけです。あなたは本当に本当に本当に本当に本当に本当に良いものを作りたいと思っています。ここに完全なコードを投稿してください。私たちはあなたの側で何が間違っている正しいコードを見て知ることができません!ですので、ヘルプセンターをご覧ください。私たちがあなたに役に立つ答えを与える機会を得るために、あなたがどのように質問をしなければならないかを理解する。 – GhostCat

答えて

0

まずバッチファイルを定義してから、バッチファイルを呼び出します。 メソッドを定義し、コンストラクターメソッドを使用しないでください。

public static String os_exec(String[] cmds) 
    { 
     int ret = 0, i = 0; 
     StringBuffer sb = new StringBuffer(); 
     Process process = null; 
     String line = null; 
     BufferedReader bufferedReader = null; 
     try 
     { 
      ProcessBuilder pb = new ProcessBuilder(cmds); 
      pb.redirectErrorStream(true); 
      process = pb.start(); 
      pb.redirectErrorStream(true); 
      bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
      while ((line = bufferedReader.readLine()) != null) 
      { 
       i += 1; 
       sb.append(line); 
       if(i > 1) 
       { 
        sb.append("\r\n"); 
       } 
      } 
      ret = process.waitFor(); 
     } 
     catch (Exception e) 
     { 
      StringBuffer err = new StringBuffer(); 
      for(String commond : cmds) 
      { 
       err.append(commond); 
       err.append(' '); 
      } 
      sb.append(e.getMessage()); 
     } 
     finally 
     { 
      if(bufferedReader != null) 
      { 
       try 
       { 
        bufferedReader.close(); 
        process.destroy(); 
       } 
       catch (Exception e) 
       { 
        sb.append(e.getMessage()); 
       } 
      } 
     } 
     return sb.toString(); 
    } 

START.BAT

start C:\skype.exe 

呼出しos_exec()。

String[] command = { "cmd.exe", "start.bat" }; 
os_exec(command); 
+0

.jarに保存されたバッチファイルを実行することはできますか? –

+1

ログを追加して例外を出力します –

+0

私の場合、実行可能なjarファイル内にbatファイルが必要です そこにフォームを実行するのは可能ですか? –

関連する問題