0

当我手动运行此脚本时,浏览器 chrome 在一个选项卡中打开该站点(这正是我所需要的)

但是,当我使用 Java 示例代码运行相同的脚本 10 次时,它会打开浏览器,但会打开 10 次相同的页面 10 TAB。

问:我如何告诉 Java 代码请运行它,因为它假定正在运行手动执行(所以我只有 1 个 TAB?)?

BASH: /var/tmp/runme.sh(运行了 1o 次,但仍按预期显示 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之前杀死铬浏览器

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”,每次您使用 Runtime 调用时,Java 都会将脚本作为不同的 shell 运行?

并且您每次都从同一个 shell执行/var/tmp/runme.sh 。

注意:/bin/sh 是一个解释器,使用 Java Runtime,您每次都调用它的多个实例来执行您的脚本。

于 2013-07-17T14:11:42.367 回答