2010-01-13 67 views
0

抱歉张贴了很多代码!!我不知道为什么我的ListFrame不起作用??? 这些是类。首先我运行MainServer,然后在另一个包中运行MainFrame,然后通过插入正确的用户名和密码来显示Listframe,但是我单击菜单栏或列表或删除按钮,但没有什么会发生。请帮帮我。Swing问题!(显示框架时出现问题)

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); 
    } 
} 

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); 

    } 

} 


} 

编辑:我发现这个问题,这是因为书面方式MainClient.runAClient的( )在代码中,我应该把它放在哪里?请帮帮我。

+3

此代码甚至没有编译。请将您发布的示例代码修改为尽可能最小但仍可编译的示例,以展示您遇到问题时的行为。此外,请查阅http://sscce.org/以获取有关如何发布正确代码示例的进一步建议。 – Bombe 2010-01-13 13:21:15

+0

我发现了这个问题,这是因为在这段代码中添加了MainClient.runAClient()。我应该把它放在哪里? – Johanna 2010-01-13 17:57:53

回答

1

这个article包含一个sscce,说明一个简单的客户端服务器GUI。您可能会发现它很有启发性。如果是这样,请考虑如何解决Echo(Kind kind)构造函数最后一行中发现的错误。

+0

我发现了这个问题,这是因为在代码中编写了MainClient.runAClient()方法。请问我应该在哪里放这行?谢谢 – Johanna 2010-01-13 18:07:36

+0

我没有办法测试你的代码。通常,您可以在服务器准备好接受新连接后的任何时候启动客户端线程。在我引用的例子的'main()'方法中,服务器首先启动,然后是客户端;两者都运行直到关闭。 – trashgod 2010-01-13 19:19:58