0

プログラムにgetRuntime()。exec()呼び出しがあります。ただし、そのうちの2つは機能しません。

public static final ROTCW = "xrandr -o left"
public static final CALCW1 = "xinput --set-prop 11 \"Evdev Axis Inversion\" 0 1"
public static final CALCW2 = "xinput --set-prop 11 \"Evdev Axes Swap\" 1";

public void actionPerformed(ActionEvent e)
{       
    try {
        Runtime.getRuntime().exec(ROTCW);
        Runtime.getRuntime().exec(CALCW1);
        Runtime.getRuntime().exec(CALCW2);}
    catch (IOException ioe){ ioe.printStackTrace();}
}});

ROTCWは確実に機能しますが(画面がcw回転します)、キャリブレーションは行われません(CALCW)。プログラムを開始したときと同じターミナルタブでCALCWを手動で入力することはできませ、新しいターミナルタブ/ウィンドウに入力することはできます。

なぜこれが起こるのですか、そして何がそれを修正しますか?

4

3 に答える 3

2

&&ロジックを Java で直接実装できます。

public static final String
    ROTCW = "xrandr -o left",
    CALCW1[] = {"xinput", "--set-prop", "11", "\"Evdev Axis Inversion\"", "0", "1"},
    CALCW2[] = {"xinput", "--set-prop", "11", "\"Evdev Axes Swap\"", "1"};

public void actionPerformed(ActionEvent e)
{       
    try {
        Runtime.getRuntime().exec(ROTCW).waitFor();
        Process p = Runtime.getRuntime().exec(CALCW1);
        p.waitFor();
        if( p.exitValue() != 0 ) Runtime.getRuntime().exec(CALCW2);
    }
    catch (IOException ioe){ ioe.printStackTrace();}
}});
于 2012-03-26T19:16:04.603 に答える
2

でシェルを追加してみてください

 public static final CALCW = "bash -c 'xinput --set-prop 11 \"Evdev Axis Inversion\" 0 1" +
     " && xinput --set-prop 11 \"Evdev Axes Swap\" 1'"

明確にすること&&は、シェルの構文であり、プログラムのもう 1 つの引数です。

于 2012-03-26T18:59:37.117 に答える
0

古い質問ですが、答えが見つからなかったので、公開しています。

コマンドの適切なセクションでは、配列バージョンの exec() を引用符なしで使用する必要があります。

CALCW1[] = {"xinput", "set-prop", "11", "Evdev Axis Inversion", "0", "1"}
于 2016-09-15T15:06:52.070 に答える