0

Я разрабатываю приложение i, которое локальный клиент отправляет информацию на сервер и сервер, имеет поля графического интерфейса, такие как имя, адрес электронной почты и номер телефона, код показывает, что текст обновляется текстовым полем, но он не отображается в 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, но он не отображается в графическом интерфейсе – 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); 
       } 
      }); 
     } 
     // ... 
    } 
} 
Смежные вопросы