2011-11-22 5 views
0

나는 지난 며칠 동안 혼자서이 작업을 해보려고 노력했지만 솔루션을 얻을 수없는 것처럼 보였습니다. 어떻게 페인트에 JFrame과 그 안의 모든 것을 강제해야합니까? 채팅 프로그램 (클라이언트/서버 접근법), 서버 클래스 및 클라이언트 코드가 동일합니다. 그러나 나는 단지 하나의 쇼를 만드는 것처럼 보이지 않는다!강제로 jframe을 적용 하시겠습니까?

import java.awt.event.ActionEvent; 

public class Chat extends JFrame implements Runnable, ActionListener, WindowListener{ 



    private static final long serialVersionUID = 1L; 
    private JPanel contentPane; 
    private JTextField line; 

    // TCP Components 
    private Socket channel = null; 

    private JScrollPane scrollPane; 
    private String toBeSent=""; 
    private final String END_CHAT_SESSION = new Character((char)0).toString(); 
    private PrintWriter out; 
    private boolean channelIsStillOpen = true; 
    private Socket channel; 
    private static JTextArea chatText; 


    public Chat(Socket channel) { 

     this.channel=channel; 

     addWindowListener(this); 

     setTitle("Remote Administrator"); 
     setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
     setBounds(100, 100, 450, 300); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     setContentPane(contentPane); 

     line = new JTextField(); 
     line.setBounds(17, 207, 289, 40); 
     line.setColumns(10); 

     JButton send = new JButton("Send"); 

     send.addActionListener(this); 

     send.setBounds(312, 214, 105, 25); 
     contentPane.setLayout(null); 

     scrollPane = new JScrollPane(); 
     scrollPane.setBounds(17, 5, 399, 196); 
     scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
     scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
     contentPane.add(scrollPane); 

     chatText = new JTextArea(); 
     chatText.setLineWrap(true); 
     chatText.setEditable(false); 
     chatText.setEnabled(false); 
     scrollPane.setViewportView(chatText); 
     contentPane.add(line); 
     contentPane.add(send); 

    } 

    @Override 
    public void run() { 

     try { 
      channel=new Socket(address, port); 
      System.out.println("Chat Connection accepted"); 
     } catch (IOException e2) { 
      // TODO Auto-generated catch block 
      e2.printStackTrace(); 
     } 

     BufferedReader in = null; 
     try { 
      in = new BufferedReader(new InputStreamReader(channel.getInputStream())); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

     out = null; 
     try { 
      out = new PrintWriter(channel.getOutputStream(),true); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

     String s=""; 

     do { 
      // Send data 
      if (toBeSent.length()!= 0) { 
       out.println(toBeSent); 
       toBeSent=""; 
      } 

      // Receive data 
      try { 
       if (in.ready()) { 
        s = in.readLine(); 
        if ((s != null) && (s.length() != 0) && !s.equals(END_CHAT_SESSION)) { 
          chatText.append("INCOMING: " + s + "\n"); 
        } 
        if(s.equals(END_CHAT_SESSION)){ 
         chatText.append("Client disconnected."); 
        } 
       } 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } while(!s.equals(END_CHAT_SESSION)); 

     channelIsStillOpen=false; 

     line.setEditable(false); 
     line.setEnabled(false); 

     if(channel!=null){ 
      try { 
       channel.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      channel=null; 
     } 

    } 

    @Override 
    public void windowActivated(WindowEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void windowClosed(WindowEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void windowClosing(WindowEvent arg0) { 

     if(channelIsStillOpen){ 
      out.println(END_CHAT_SESSION); 
     } 

     dispose(); 

    } 

    @Override 
    public void windowDeactivated(WindowEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void windowDeiconified(WindowEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void windowIconified(WindowEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void windowOpened(WindowEvent arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void actionPerformed(ActionEvent arg0) { 

     String s = line.getText(); 

     if (!s.equals("")) { 
      chatText.append("OUTGOING: " + s + "\n"); 

      // Send the string 
      toBeSent=s; 
     } 

     line.setText(""); 

    } 
} 

편집 : 사용중인 클래스가 항상 동일하도록 코드를 편집했습니다. 아무것도!

+0

나는 이것이 StackOverflow에 속한다고 생각한다. –

답변

0

나는 당신이 당신의 생성자의 끝이 누락 생각 :

또한
this.setVisible(true); 

, 왜 당신은 설정하지? setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);, 왜 응용 프로그램을 열어두고 싶습니까?

관련 문제