2

アプレットを作りました。以前JPanelはアプレットのコンテンツを設定していました。init()メソッドやstart()その他の操作を行います。すべてを含めずにアプレットを実行するstart()と、コンテンツは表示されますが、メソッドを追加するとstart()、アプレットにコンテンツが表示されません。

何故ですか?

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

import javax.swing.JApplet;
import javax.swing.JEditorPane;
import javax.swing.JPanel;


public class Server extends JApplet {

final static int port = 4444;
ServerSocket listen;
JEditorPane message;
JPanel content;

    public void init(){
        message = new JEditorPane();
        message.setText("Listening...");
        message.setEditable(false);
        message.setVisible(true);

        content = new JPanel();
        content.setLayout(new BorderLayout());
        content.add(message, BorderLayout.NORTH);

        setContentPane(content);
    }

    public void start(){    
         try {
             listen = new ServerSocket(port);
             while(true){   
                Socket client = listen.accept();    
                HandleConnection hc= new HandleConnection(client);
            }

            } catch (IOException e) {
              System.out.println("Couldn't listen on port "+port);
        }
        }

    public void stop(){}
    public void destroy(){}
}
4

1 に答える 1

5

あなたはあなたのwhile (true)ブロックでSwingイベントスレッドを踏みつけています。このスレッドは、イベントディスパッチスレッド(EDT)とも呼ばれ、GUIのすべてのグラフィックスとユーザーインタラクションを担当するため、長時間実行されるコードを実行すると、GUIが完全にフリーズします。解決策:イベントスレッドではこれを行わないでください。代わりに、SwingWorkerオブジェクトによって提供されるようなバックグラウンドスレッドでこれを行ってください。詳細については、Swingの同時実行性をお読みください。

于 2012-08-21T02:25:36.587 に答える