0

로컬 클라이언트가 정보를 서버로 보내고 서버에 이름, 전자 메일 및 전화 번호와 같은 GUI 필드가있는 응용 프로그램을 개발 중입니다. 코드는 텍스트가 텍스트가 업데이트되었지만 나타나지 않습니다. GUI. 다음은 코드JTextfield가 GUI에서 동적으로 업데이트되지 않습니다

public class evensoft extends javax.swing.JFrame { 


     private static final int port=8008; 
     private static ServerSocket serversocket; 
     private static Socket clientsocket; 
     private static InputStreamReader reader; 
     private static BufferedReader breader; 
     private static InputStreamReader InputStreamReader; 
     private static String message; 
     String msg; 

     public evensoft() 
     { 
      initComponents(); 

     } 


     @SuppressWarnings("unchecked") 
     // <editor-fold defaultstate="collapsed" desc="Generated Code">       



     public static void main(String args[]) 
     { 



      java.awt.EventQueue.invokeLater(new Runnable() 
      { 
       public void run() { 
        new evensoft().setVisible(true); 


       } 
      }); 
      evensoft n1=new evensoft(); 
      try 
      { 
      serversocket=new ServerSocket(port,0,InetAddress.getLocalHost()); 
      label.setText("Server IP: "+serversocket.getInetAddress()+ " port " +serversocket.getLocalPort()); 
      } 
      catch(IOException e) 
      { 
       e.printStackTrace(); 
      } 
      while(true) 
      { 
       try 
       { 
        clientsocket=serversocket.accept(); 
        reader=new InputStreamReader(clientsocket.getInputStream()); 
        breader=new BufferedReader(reader); 
        message=breader.readLine(); 
        char a[]=message.toCharArray(); 
        n1.formatmessage(a); 



       } 
       catch(IOException e1) 
       { 
        e1.printStackTrace(); 
       } 

      } 


     } 
     public void formatmessage(char[] a) 
     { 

       char[] Fname=new char[10]; 
       char[] lname=new char[50]; 
       char[] email=new char[50]; 
       char[] phone=new char[15]; 
       //Formatting meg string 

       String n1=new String(Fname); 
       String n2=new String(lname); 
       String n3=new String(email); 
       String n6=new String(phone); 

       System.out.println(n1); 
       System.out.println(n2); 
       System.out.println(n3); 
       System.out.println(n5); 
       System.out.println(n6); 

       Name.setText(n1.trim()+" "+n2.trim()); 
       Email.setText(n3.trim()); 
       Contact.setText(n6.trim()); 


       System.out.println(Name.getText()); 
       System.out.println(Email.getText()); 
       System.out.println(Contact.getText()); 



     } 
    public javax.swing.JTextField Contact; 
    public javax.swing.JTextField Email; 
    public javax.swing.JTextField Name; 

} 
+2

여기서 initComponents 메소드는 무엇입니까? 또한 Java에서 규칙은 첫 번째 문자가 대문자 인 클래스 이름을 사용하는 것입니다. ClassName – Nick

+0

이 코드는 컴파일되지 않습니다. initcomponents()가 범위에서 선언되지 않았습니다. 소켓에서 읽은 것을 제거하십시오. 아무도 그렇게 쉽게 복제 할 수 없습니다. 정적 값을 사용하고 작동하는지 확인하십시오. 예제를 단순화하십시오. – codethulhu

+0

코드가 준수되고 클라이언트에서 데이터를 수신하고 settext를 통해 텍스트 필드를 업데이트하지만 GUI에 표시되지 않습니다. – MandarCT

답변

2

사용하면 업데이트하는 동일한 양식을하지 않습니다 표시되는 형태이다.

당신은 여기에 표시 할 양식을 만들 :

java.awt.EventQueue.invokeLater(new Runnable() 
{ 
    public void run() { 
     new evensoft().setVisible(true); 
    } 
}); 

그리고 형태 나중에

이 문제를 해결하기 위해
evensoft n1=new evensoft(); 

로, 당신은 단지 하나의 형태를 인스턴스화하고 그것을 사용해야 라인을 업데이트 두 위치 모두에서 :

public static void main(String args[]) { 
    final evensoft f = new evensoft(); 

    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      f.setVisible(true); 
     } 
    }); 

    // ... 

    while(true) { 
     try { 
      clientsocket=serversocket.accept(); 
      reader=new InputStreamReader(clientsocket.getInputStream()); 
      breader=new BufferedReader(reader); 
      message=breader.readLine(); 
      final char a[]=message.toCharArray(); 

      java.awt.EventQueue.invokeLater(new Runnable() { 
       public void run() { 
        f.formatmessage(a); 
       } 
      }); 
     } 
     // ... 
    } 
} 
관련 문제