以前、内部の匿名クラスが「外部」クラスのフィールドを認識していなかったときに問題が発生しました。内部クラスに表示されるように、final変数を作成する必要がありました。今、私は反対の状況にあります。「outer」クラス「ClientListener」では、内部クラス「Thread」を使用し、「Thread」クラスには「run」メソッドがあり、「outer」クラスの「earPort」が表示されます。なんで?
import java.io.IOException;
import java.net.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ClientsListener {
private int earPort;
// Constructor.
public ClientsListener(int earPort) {
this.earPort = earPort;
}
public void starListening() {
Thread inputStreamsGenerator = new Thread() {
public void run() {
System.out.println(earPort);
try {
System.out.println(earPort);
ServerSocket listeningSocket = new ServerSocket(earPort);
Socket serverSideSocket = listeningSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(serverSideSocket.getInputStream()));
} catch (IOException e) {
System.out.println("");
}
}
};
inputStreamsGenerator.start();
}
}