3

こんにちは私はCardLayoutと3枚のカードを備えたJframeを持っています。最初のカードのボタンにActionListenerがあります。

このコードはうまく機能しています:

JButton btnLogin = new JButton("Login");
btnLogin.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        CardLayout cl = (CardLayout)(cards.getLayout());
        cl.show(cards, "wait");
    }
}

問題は、サーバーにログインするためのコードを追加するときです(xmppクライアントを開発しています)。

JButton btnLogin = new JButton("Login");
btnLogin.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        CardLayout cl = (CardLayout)(cards.getLayout());
        cl.show(cards, "wait");
        xmppManager = new Xmpp("jabberserver", 5222);
        try {
            xmppManager.init();
        } catch (XMPPException e) {
            e.printStackTrace();
        }
        cl.show(cards, "userList");
    }
}

基本的に、ユーザーがログインボタンを押してログインしたときに「お待ちください」カードを表示してから、別のカードを表示する必要があります。ただし、この場合、「待機」カードは表示されず、ログインを実行し(約5秒かかります)、最後のカード「userList」を直接表示します。

私が欠けているものは何ですか?

4

2 に答える 2

5

すべてのコードはイベントディスパッチスレッドで実行されているため、GUIがそれ自体を再描画できません。EDTをブロックしないように、別のスレッドで実行するにはサーバーへの呼び出しが必要です。

詳細と推奨される解決策については、同時実行に関するSwingチュートリアルのセクションをお読みください。

于 2011-02-17T16:27:23.370 に答える
1

しばらくお待ちくださいを表示した後、画面の再描画をトリガーする必要があるかもしれません。自動的にトリガーされない場合があります。

于 2011-02-17T16:07:57.550 に答える