1

次のコードを使用しています

public void getIPTableRules(){
    ProcessBuilder pb = new ProcessBuilder("/sbin/iptables", "-L");
    try {
        Process p = pb.start();
        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
        int lineCount = 0;
        String zeile;
        while ((zeile =  input.readLine()) != null) {
            System.out.println(zeile);
            System.out.println(lineCount);
            line[lineCount] = zeile;
            lineCount++;
        }

        input.close();
    } catch (IOException ex) {
        Logger.getLogger(CheckFirewall.class.getName()).log(Level.SEVERE, null, ex);
    }
}

System.out は正しく出力されます。変数行は、次のようにクラスに設定されます。

public String line[];

次の行で例外が発生します。

line[lineCount] = zeile;

だから誰かが私が間違っていることを教えてください...

4

3 に答える 3

3

おそらく、String[] line配列は次のように初期化されていません

String[] line = new String[100];

ただし、出力が何行になるかProcessを事前に正確に知ることはできないため、List<String>として初期化する代わりにa を使用することをお勧めします

List<String> lines = new ArrayList<String>();

Process出力を1行ずつ追加します

while ((zeile =  input.readLine()) != null) {
    System.out.println(zeile);
    System.out.println(lineCount);
    lines.add(zeile); // using List#add()
    lineCount++;
}
于 2013-10-09T15:49:29.857 に答える
1

配列を初期化しておらず、定義しただけです:

public String line[];

適切なサイズを使用して初期化する必要があります。

public String line[] = new String[SIZE];

SIZE は定数整数です。

于 2013-10-09T15:49:22.637 に答える