簡體   English   中英

空白的Java搖擺框架

[英]Blank Java Swing Frame

我是一名學生,正在嘗試更多地了解Java開發,目前正在使用swing創建一個簡單的客戶端/服務器IM應用程序。

讓我試着解釋一下我得到的問題:

  1. Login類在啟動時運行,在成功通過服務器驗證后(工作正常),ClientChat類被實例化。

  2. ClientChat創建一個新的JFrame,與服務器建立新連接並創建新的I / O流。 所有這些背景的東西工作正常,但新框架是完全空白的。

  3. 如果我在沒有Login類的情況下運行應用程序(即直接運行ClientChat),則不存在此問題。

到目前為止不成功的方法:

  1. 使用frame.pack()。
  2. 使用frame.validate()。
  3. 將Login的JFrame傳遞到ClientChat並簡單地切換面板而不是創建新的框架。

從登錄():

    panel.add(userLabel);
    panel.add(passLabel);
    panel.add(userEntry);
    panel.add(passEntry);   
    panel.add(button);

    frame.add(panel, BorderLayout.NORTH);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setTitle("Chat Room Authentication");
    frame.setSize(300, 120);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);

    ...

    frame.setVisible(false);
    ClientChat clientChat = new ClientChat(serverIP);
    clientChat.start();

來自ClientChat():

    userText = new JTextField();
    chatWindow = new JTextArea();

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
    frame.setTitle("Logged in as "+user.toUpperCase());
    frame.add(userText, BorderLayout.SOUTH);
    frame.add(new JScrollPane(chatWindow), BorderLayout.CENTER);    
    frame.setSize(300, 150);
    frame.setVisible(true);

你有一個經典的Swing線程問題,你在Swing的事件線程上運行長時間運行的代碼,也稱為E vent D ispatch T hread或EDT ,這樣做會阻止EDT執行它繪制GUI並與用戶交互的必要任務。

解決方案:使用SwingWorker幫助您創建一個后台線程,該線程允許長進程不干擾Swing GUI並允許它與GUI良好通信。

有關這方面的更多信息,請查看: 課程:Swing中的並發性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM