[질문] 전역변수인데 왜 사용을 못하는거죠...?
단화한
창을 닫을때 현재 창을 창들을 저장하고 있는 리스트에서 제거 해야 하는데...public class Chat_Room extends JFrame implements Runnable, ActionListener {
protected JMenuBar menuBar;
protected JMenu mainMenu, subMenu;
protected JMenuItem end_chat, invite;
// 방 이름
String roomName;
String ID;
// 클라이언트의 폼을 구성하는 component
JFrame chatWindow;
JPanel p;
JTextArea talkArea;
JTextField tf;
JScrollPane sp;
// 서버와의 접속을 위한 socket 객체 선언
Socket socket;
Vector chat_List = new Vector();
public Vector roomList;
String chat_user;// 스트림 클래스 선언
private ObjectOutputStream os;//생성자
public Chat_Room(ObjectOutputStream os, String ID, String chat_user, Vector roomList) {
super(ID+의 대화창);
roomName = ID+chat_user;
CreateGUI(roomName);this.os = os;
this.ID = ID;
this.roomList = roomList;
chat_List.add(ID);
chat_List.add(chat_user);addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
roomList.remove(this); // 여기에 문제있음...
dispose();
}
});
}이하 생략...
이렇게 된 코드에서... 아래 roomList의 this객체를 remove하는 부분중 roomList에 빨간밑줄이 들어가거든요?
위에 분명 전역변수(?)로 Vector roomList 라고 선언을 해줬는데...
다른 메소드에 정의된 내부 클래스 안에 있는 비 final roomList 변수를 참조할 수 없습니다.
라고 나오네요...왜 그렇죠? 젤 위에 선언해줬는데도 그렇게 되는 이유를 모르겠어요..
-
희미햬 2024-09-02
아.. inner class에 대해 보니 당연히 사용할 수 없다는 말이 이해가 되네요..
그런데.. final을 붙이면 수정이 불가인데.. remove가 먹을라나..? 함 해볼께요 ^^; -
세이 2024-09-02
inner class의 사용법을 조금더 보셔야 할듯.. final로 지정하시면 될듯 싶네요.
-
레나 2024-09-02
final을 붙이셔야죠...public final Vector roomList;
-
핫와인 2024-09-02
요즘은 자바를 손을 잘대서. Chat_Room.this.roomList.remove(this); 하면 되지 않을까요? 않되면.. 다른분이 도와주세요. 그리고, 당연히 rooList를 사용할수 없죠.