[질문](자바awt)프레임 2개 있는데요 먼저 하나 띄운다음 버튼 누르면 꺼지고 다음 두번재 프레임이 실행하게 하려면
자바 AWT
프레임 2개 있는데요.
먼저 하나 띄운다음 버튼 누르면 꺼지고
다음 두번재 프레임이 실행하게 하려면 전체적인 구조를 어떻게 해야하죠?
파일하나에 클래스를 2개 생성해서 호출만 하면 되나요?
그냥 단순하게 그렇게 생각하고 코딩했는데 1번째 프레임이 잘 실행되고 버튼 누르면 꺼지고
프레임 두번째께 뜨긴 떴는데요; 화면에 뜨기만 하고 (button, TextView, TextField, 등)
아무것도 안되요; 마우스로 눌러봐도 버튼도 다 작동 안하고
그런데 프레임2는 원래 파일하나에 프레임2만 들어가게 해서 실행했을 땐 잘만 실행됐던거거든요.
실행 잘되서 그저 집어넣기만 한건데 잘안되네요;
제가 만든 파일 구조 간단하게 써놓을께요;;
뭐가 잘못된건지 어떻게 고쳐야되는건지 자세히좀 알려주세요ㅠㅠㅠ
public class Frame1 extends Frame{
//변수 선언(텍스트필드, 버튼 등)
Frame1(){
}
void makeFrame(){
this.add(button); //확인버튼
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
try{
dispose(); //확인버튼 누르면 프레임이 닫히고
createNewFrame(); //새 프레임 Frame2가 실행되게 하려고함
}catch(Exception e){}
}
});
}
void createNewFrame(){
Frame2 f2 = new Frane2();
f2.setVisible(true);
f2.connect();
}
public static void main(String[] args){
Frame1 f1 = new Frame1();
f1.makeFrame();
f1.setVisible(true);
}
}
//-----------------------------------------------------------------------
class Frame2 extends Frame{
//변수선언
public Frame2(){
//TextField, TextView 프레임에 추가하는 소스
}
void connect(){
//소켓 연결 부분
server = new ServerSocket(7777);
socket=server.accept();
.............
}
}
[정리] 실행하면-------------------------------------------------------------
첫번째 프레임 잘뜨고 버튼도 잘 되는데 버튼 누르고 꺼지고나서
두번째 프레임창이 뜨기만 하고 아무것도 안됨
---------------------------------------------------------------------------
dispose말고 hide나
dispose말고 hide나 setvisible을 써도 되지 않을까나요 -ㅅ-;;
dispose의 경우 창에서 사용된 자원을 되돌려준다고 알고있습니다.
아마 그 정리과정에서 문제가 발생한걸지도...
당연한거죠...
처음 Frame1 을 extend 한 클래스 안에서 Frame 2 를 선언헀으니까
Frame1 을 꺼버리면 그 클래스 자체가 꺼져 버리잖아요.
한 클래스 안에서 Frame 1 과 Frame 2 를 생성하려면
class Test{
Frame 1 = new Frame();
Frame 2 = new Frame();
}
하신후 그 안에서 버튼으로 제어를 하시던가
혹은, 클래스 세개를 만들어서
하나는 Main 클래서 나머지 두개는 Frame 을 extend 하는 클래스를 만들고
Main 에서 두개의 클래스를 제어하면 됩니다.
아니면 님의 방식을 무식하게 바꾸면 두개의 프레임을 실행시키고
하나의 프레임만 setVisible(true) 해준후 버튼에 따라 보일건지 말건지 하면 되겠네요.
그런데 이방식은 조금 무식한듯....
---------------------------------------------------------------------------------------------------------------
루비 온 레일즈로 만들고 있는 홈페이지 입니다.
http://jihwankim.co.nr
여러 프로그램 소스들이 있습니다.
필요하신분은 받아가세요.
두번째 프레임을
두번째 프레임을 띄우는 버튼이 첫번째 프레임에 있는 것인가요?
만약 그렇다면 첫번째 프레임을 닫을 당시에 자신의 자원을 되돌려주면 안됩니다.
그 이유는 당연히 그 자신이 두번째 프레임을 생성한 곳이기 때문이죠.
그래서 첫번째 댓글을 올리신 분의 의견처럼 hide와 setVisible 중에 사용해야 하는데
아마도 hide가 알맞을 듯 한데, api를 한번 확인해 보시면 그 차이점을 알 수 있을 듯 합니다.
똑!똑!
똑!똑!
connect()에서...
void createNewFrame() 메소드 안의
connect()안에서 디스페치 쓰레드는 멈춰있죠.
connect()만 주석처리 해 보세요.
** 중요 **
AWT에서 소켓을 사용하시려면
자주 I/O block상태가 되기 때문에
쓰레드에 대해서 반드시 이해하고 있어야 합니다.
댓글 달기