Gui застыл в то время как цикл - PullRequest
0 голосов
/ 13 ноября 2011

server.java

ок, проблема в том, что: когда я нажимаю кнопку запуска, графический интерфейс «завис», но сервер работает, у меня вывод в консоли. Я думаю, что я должен использовать нити для этого, но я не знаю, как это реализовать = /

void Runer() throws Exception
{
    ServerSocket welcomeSocket = new ServerSocket(6789);
    System.out.println("welcome into server");
    while(true)
    {

        Socket connectionSocket = welcomeSocket.accept();
        if (connectionSocket != null)
        {
            System.out.println(connectionSocket);
            Client client = new Client(connectionSocket);
            client.start();
        }
    }
}

}

class Client extends Thread
{
private Socket connectionSocket;
private String pozX;
private String ans;
private String pozY;
private String capitalizedSentence;
private BufferedReader inFromClient;
private DataOutputStream outToClient;

public Client(Socket c) throws IOException
{
    connectionSocket = c;
}

public void run() 
{
    try
    {    
        inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
        outToClient = new DataOutputStream(connectionSocket.getOutputStream());

        pozX = inFromClient.readLine();
        pozY = inFromClient.readLine();
        System.out.println(pozX);
        System.out.println(pozY);
        capitalizedSentence = pozX.toUpperCase() + '\n';
          BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));

       outToClient.writeBytes(capitalizedSentence);

    }
    catch(IOException e)
    {
        System.out.println("Errore: " + e);
    }
}

gui.java

JPanel GuiServera(){
    JPanel panel = new JPanel();
    area = new JTextArea();
    area.setColumns(20);
    area.setRows(10);
    area.setText("The log is logging injoy");
    panel.setLayout(null);
    start = new JButton("Start");
    start.addActionListener(list);
    panel.add(start);
    stop = new JButton("Stop");
    stop.addActionListener(list);
    pane = new JButton("Admin Panel");
    panel.add(stop);

    panel.add(pane);
     scrolled = new JScrollPane(area);
     panel.add(scrolled);
    Insets insets = panel.getInsets();
    Dimension size = start.getPreferredSize();
    start.setBounds(40 + insets.left, 20 + insets.top,
    size.width, size.height);

    size = stop.getPreferredSize();
    stop.setBounds(40 + insets.left, 60 + insets.top,
    size.width, size.height);

    size = pane.getPreferredSize();
    pane.setBounds(40 + insets.left, 100 + insets.top,
    size.width, size.height);

    size = scrolled.getPreferredSize();
    scrolled.setBounds(160 + insets.left, 20 + insets.top,
    size.width, size.height);
    return panel;
}
class Nasluchiwacz implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==start){
            System.out.println("start");
            area.append("start button\n");
            try {
                inzServer.Runer();
            } catch (Exception ex) {
                Logger.getLogger(Gui.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
        else if (e.getSource()==stop){
            area.setText(area.getText()+"\nstop\n");
        }
    }

}

Ответы [ 2 ]

4 голосов
/ 13 ноября 2011

Вы почти все делаете правильно. Вместо бегуна расширяется нить. Сделайте его работоспособным.

Тогда в твоей гитаре. Вы можете либо в новый поток (вставка) .start (); Или взгляните на Executorservice или Swingworkers.

0 голосов
/ 14 ноября 2011

вы должны попробовать использовать SwingWorker.проверить это Учебник солнца

...