2010-01-13 5 views
0

désolé pour l'affichage de beaucoup de code !! Je ne sais pas pourquoi mon ListFrame ne fonctionne pas ??? ce sont les classes.Au début, je lance le MainServer et puis je vais exécuter le MainFrame dans l'autre paquet. Et puis en insérant un nom d'utilisateur et un mot de passe, le Listframe sera affiché, MAIS je clique sur la barre de menu ou supprimer le bouton mais rien ne se passera.quoi? Aidez-moi, s'il vous plaît.Problème Swing! (Problème de montrer un cadre)

classe MainSerevr:

public class MainServer { 

static Socket client = null; 
static ServerSocket server = null; 

public static void main(String[] args) { 
    System.out.println("Server is starting..."); 
    System.out.println("Server is listening..."); 

    try { 
     server = new ServerSocket(5050); 
    } catch (IOException ex) { 
     System.out.println("Could not listen on port 5050"); 
     System.exit(-1); 

    } 
    try { 
     client = server.accept(); 
     System.out.println("Client Connected..."); 
    } catch (IOException e) { 
     System.out.println("Accept failed: 5050"); 
     System.exit(-1); 
    } 
    try { 
     BufferedReader streamIn = new BufferedReader(new InputStreamReader(client.getInputStream())); 

     boolean done = false; 
     String line; 
     while (!done) { 
      line = streamIn.readLine(); 
      if (line.equalsIgnoreCase(".bye")) { 
       done = true; 
      } else { 
       System.out.println("Client says: " + line); 
      } 
     } 

     streamIn.close(); 
     client.close(); 
     server.close(); 
    } catch (IOException e) { 
     System.out.println("IO Error in streams " + e); 
    } 
}} 

ListFrame:

public class ListFrame extends javax.swing.JFrame implements PersonsModelChangeListener { 

    private InformationClass client; 
    private static DefaultListModel model = new DefaultListModel(); 
    private ListSelectionModel moDel; 

    /** Creates new form ListFrame */ 
    public ListFrame(InformationClass client) { 
     initComponents(); 
     this.client = client; 
     jList1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 


     fillTable(); 
     Manager.addListener(this); 
    } 

    private void deleteAPerson() { 
     int index = jList1.getSelectedIndex(); 
     String yahooId = (String) jList1.getSelectedValue(); 
     model.remove(index); 
     Manager.removeApersonFromSQL(yahooId); 
     int size = model.getSize(); 
     if (size == 0) { 
      jButton1.setEnabled(false); 
     } else { 
      if (index == size) { 
       index--; 
      } 
      jList1.setSelectedIndex(index); 
      jList1.ensureIndexIsVisible(index); 

     } 
    }      



    private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {           
     AddAPerson frame = new AddAPerson(client); 
     frame.setVisible(true); 


    }           

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
     deleteAPerson(); 
    }           

    private void jList1ValueChanged(javax.swing.event.ListSelectionEvent evt) {          
     MainClient.setText(""); 
     MainClient.runAClient(); 
     ChatFrame frame = new ChatFrame(client); 
     frame.setVisible(true); 
    } 
    public void fillTable() { 
    try { 
     List<InformationClass> list = null; 
     list = Manager.getClientListFromMySQL(); 
     if (list == null) { 

      JOptionPane.showMessageDialog(this, "You should add a person to your list", "Information", JOptionPane.OK_OPTION); 
      return; 
     } else { 


      for (int i = 0; i < list.size(); i++) { 
       InformationClass list1 = list.get(i); 
       model.add(i, list1.getId()); 
      } 

      jList1.setModel(model); 
     } 


    } catch (SQLException ex) { 
     Logger.getLogger(ListFrame.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

classe MainClient:

public class MainClient { 


private static InformationClass info = new InformationClass(); 
private static Socket c; 
private static String text; 

public static String getText() { 
    return text; 
} 

public static void setText(String text) { 
    MainClient.text = text; 
} 

private static PrintWriter os; 
private static BufferedReader is; 
static boolean closed = false; 

/** 
* @param args the command line arguments 
*/ 
public static void runAClient() { 
    try { 
     c = new Socket("localhost", 5050); 

     os = new PrintWriter(c.getOutputStream()); 
     is = new BufferedReader(new InputStreamReader(c.getInputStream())); 

     String teXt = getText(); 
     os.println(teXt); 
     if(c!=null&& is!=null&&os!=null){ 
     String line = is.readLine(); 
     System.out.println("Text received: " + line); 
     } 


     c.close(); 
     is.close(); 
     os.close(); 


    } catch (UnknownHostException ex) { 
     System.err.println("Don't know about host"); 

    } catch (Exception e) { 
     System.err.println("IOException: " + e); 

    } 

} 


} 

EDIT: J'ai trouvé le problème, ce qui est à cause de writting MainClient.runAClient () dans le code, où dois-je le mettre? Aidez-moi, s'il vous plaît.

+3

Ce code ne compile même pas. Veuillez retravailler l'exemple de code que vous envoyez dans l'exemple le plus petit possible mais toujours compilable qui présente le comportement avec lequel vous rencontrez des problèmes. Consultez également http://sscce.org/ pour plus d'informations sur la publication d'exemples de code corrects. – Bombe

+0

J'ai trouvé le problème, qui est dû à l'ajout de MainClient.runAClient() dans ce code. Où dois-je le mettre? – Johanna

Répondre

1

Ce article10 contient un sscce qui illustre une interface graphique client-serveur simple. Vous pouvez le trouver instructif. Si c'est le cas, réfléchissez à la manière de résoudre le problème rencontré dans la dernière ligne du constructeur Echo(Kind kind).

+0

J'ai trouvé le problème qui est dû à l'écriture de la méthode MainClient.runAClient() dans le code.whould vous s'il vous plaît aidez-moi là où devrais-je mettre cette ligne? Merci – Johanna

+0

Je n'ai aucun moyen de tester votre code. En général, vous pouvez démarrer votre thread client à tout moment une fois que le serveur est prêt à accepter de nouvelles connexions. Dans la méthode 'main()' de l'exemple que j'ai cité, le serveur démarre en premier, suivi par le client; les deux courent jusqu'à ce que l'un soit fermé. – trashgod