1

次のコードがありますが、新しい Thread クラスの外部で String 行を宣言すると、例外が発生します。私は C# のバックグラウンドを持っているので、Java が真のクロージャーをサポートしていないことを理解しています。だから私の質問は:

新しいスレッドの外で文字列を宣言し、それを新しいスレッドで使用するにはどうすればよいですか?

別のメソッドで定義された内部クラス内の非最終変数行は参照できません

ProcessBuilder builder =
    new ProcessBuilder("/Users/Joe/Desktop/file", "-i", src);
builder.redirectErrorStream(true);
Process process = builder.start();
final InputStream is = process.getInputStream();
String line;
new Thread(new Runnable() {
    @Override public void run() {
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            while ((br.readLine()) != null) {
                line += br.readLine() + "\n";
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }               
}).start();
4

4 に答える 4

3

linea に変更しStringBuilder、 として宣言しfinalます。次にrun()メソッドを に追加するように変更しますStringBuilder

join()メインスレッドを読み込もうとする前に子スレッドを作成していれば、.lineを使用する必要はありませんStringBuffer

于 2013-04-07T15:34:17.237 に答える
0

を保持して変更する別のオブジェクトを作成する必要がありますString。このオブジェクトを final にし、このオブジェクト メソッドを使用して文字列を変更します。

StringBuilder最終オブジェクトとして使用してみて、そのappend関数を使用して文字列を変更できます。

于 2013-04-07T15:31:11.603 に答える