0

このスクリプトを手動で実行すると、ブラウザーのクロムが 1 つのタブでサイトを開きます (これはまさに私が必要としていた方法で完璧です)

しかし、Java サンプル コードを使用して同じスクリプトを 10 回実行すると、ブラウザーが開きますが、同じ 10 ページのタブが 10 回開きます。

Q. 手動で実行されていると想定されているように Java コードを実行してください (タブが 1 つしかないように)、どのように伝えることができますか?

BASH: /var/tmp/runme.sh (10 回実行しても、期待どおり常に 1 つのタブが表示されます)

export DISPLAY=:0.0
ps aux | grep chromium-browser | awk '{ print $2 }' | xargs kill -9;
sleep 8;
chromium-browser --process-per-site --no-discard-tabs --ash-disable-tab-scrubbing -disable-translate "http://www.oracle.com" &

Java:そのスクリプトを 10 回起動する

  system("/var/tmp/runme.sh &");

  public static String system(String cmds) {
    String value = "";
    try {
      String cmd[] = { "/bin/sh", "-c", cmds};
      Process p = Runtime.getRuntime().exec(cmd);
      p.waitFor();
      BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
      String line = reader.readLine();
      while (line != null) {
        value += line + "\n\r";
        line = reader.readLine();
      }
    } 
    catch (IOException ioe) {
      ioe.printStackTrace();
    } 
    catch (InterruptedException ie) {
      ie.printStackTrace();
    }
    return value;
  }
4

2 に答える 2

1

Java はときどきおかしくなります。解決しました。

1( Java を強制終了する前に Chromium ブラウザーを強制終了する

2(クロムブラウザを終了した後、Javaアプリケーションを起動します

3 (タブが 1 でブラウザが 1 になりました

前: (間違った)

export DISPLAY=:0.0
pkill java;
java -cp SystemV.jar Main.Start "boot chromium now with 1 tab and 1 browser" &
ps aux | grep chromium-browser | awk '{ print $2 }' | xargs kill -9;
chromium-browser --process-per-site --no-discard-tabs --ash-disable-tab-scrubbing -disable-translate "http://www.oracle.com" &

後:

export DISPLAY=:0.0
ps aux | grep chromium-browser | awk '{ print $2 }' | xargs kill -9;
chromium-browser --process-per-site --no-discard-tabs --ash-disable-tab-scrubbing -disable-translate "http://www.oracle.com" &
pkill java;
java -cp SystemV.jar Main.Start "boot chromium now with 1 tab and 1 browser" &
echo "it works now"
于 2013-07-18T10:13:46.123 に答える
0

この行から&を削除しますsystem("/var/tmp/runme.sh &");

第二に、これを使用している可能性があります: "/bin/sh"、Java はランタイムを使用して呼び出すたびに異なるシェルとしてスクリプトを実行していますか?

毎回同じシェルから/var/tmp/runme.shを実行しています。

注: /bin/sh はインタープリターであり、Java ランタイムを使用すると、その複数のインスタンスを呼び出して毎回スクリプトを実行します。

于 2013-07-17T14:11:42.367 に答える