Socket com tela feita pelo netbens

2 respostas
E

To com esse codigo e está funcionando beleza.
Mas o problema é que quando uso a tela -servidor- criada pelo netbens. A tela não é carregada.
Por exemplo: faço o frmae com Jtextfield, compila tudo certinho mas nao carrega a tela servidor.
alguem tem alguma ideia do que poço faze?
agrade

Cliente

import java.io.*;
   import java.net.*;
   import java.awt.*;
   import java.awt.event.*;
   import javax.swing.*;

  public class Client extends JFrame {
    // Text field for receiving radius
    private JTextField jtf = new JTextField();

    // Text area to display contents
    private JTextArea jta = new JTextArea();

    // IO streams
    private DataOutputStream toServer;
    private DataInputStream fromServer;

    public static void main(String[] args) {
      new Client();
    }

    public Client() {
      // Panel p to hold the label and text field
      JPanel p = new JPanel();
      p.setLayout(new BorderLayout());
      p.add(new JLabel("Enter radius"), BorderLayout.WEST);
      p.add(jtf, BorderLayout.CENTER);
      jtf.setHorizontalAlignment(JTextField.RIGHT);

      setLayout(new BorderLayout());
      add(p, BorderLayout.NORTH);
      add(new JScrollPane(jta), BorderLayout.CENTER);

      jtf.addActionListener(new ButtonListener()); // Register listener

     setTitle("Client");
    setSize(500, 300);
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     setVisible(true); // It is necessary to show the frame here!

     try {
       // Create a socket to connect to the server
       Socket socket = new Socket("localhost", 8000);
       // Socket socket = new Socket("130.254.204.36", 8000);
       // Socket socket = new Socket("drake.Armstrong.edu", 8000);

       // Create an input stream to receive data from the server
       fromServer = new DataInputStream(
         socket.getInputStream());

       // Create an output stream to send data to the server
       toServer =
         new DataOutputStream(socket.getOutputStream());
     }
     catch (IOException ex) {
       jta.append(ex.toString() + '\n');
     }
   }

   private class ButtonListener implements ActionListener {
     public void actionPerformed(ActionEvent e) {
       try {
         // Get the radius from the text field
         double radius = Double.parseDouble(jtf.getText().trim());

         // Send the radius to the server
        toServer.writeDouble(radius);
         toServer.flush();

         // Get area from the server
         double area =  fromServer.readDouble();

         // Display to the text area
         jta.append("Radius is " + radius + "\n");
         jta.append("Area received from the server is "
           + area + '\n');
       }
       catch (IOException ex) {
         System.err.println(ex);
       }
     }
   }
  }

coloco a parte a patir da linha ( // Create a server socket) no contrutor mas não abre a tela.

servidor

package socket6;

   import java.io.*;
   import java.net.*;
   import java.util.*;
   import java.awt.*;
   import javax.swing.*;

public class Server extends JFrame {
     // Text area for displaying contents
     private JTextArea jta = new JTextArea();

   public static void main(String[] args) {
     new Server();
    }

    public Server() {
      // Place text area on the frame
      setLayout(new BorderLayout());
      add(new JScrollPane(jta), BorderLayout.CENTER);
      setTitle("Server");
     setSize(500, 300);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setVisible(true); // It is necessary to show the frame here!

      try {
        // Create a server socket
        ServerSocket serverSocket = new ServerSocket(8000);
        jta.append("Server started at " + new Date() + '\n');

        // Listen for a connection request
        Socket socket = serverSocket.accept();

        // Create data input and output streams
        DataInputStream inputFromClient = new DataInputStream(
          socket.getInputStream());
        DataOutputStream outputToClient = new DataOutputStream(
          socket.getOutputStream());

        while (true) {
          // Receive radius from the client
          double radius = inputFromClient.readDouble();

          // Compute area
          double area = radius * radius * Math.PI;

          // Send area back to the client
          outputToClient.writeDouble(area);

          jta.append("Radius received from client: " + radius + '\n');
          jta.append("Area found: " + area + '\n');
        }
      }
      catch(IOException ex) {
        System.err.println(ex);
      }
    }
}

2 Respostas

ViniGodoy

Com aquele while ali, seu código nunca irá sair do construtor.

Mova o while para outra thread.

E não jogue pedra no poço.

L

Só incrementando um pouco o que o Vini falou. Vc precisa de algo assim(usando SwingWorke):

class CodigoComWhile extends SwingWorker<Void, Void> {

<a class="mention" href="/u/override">@Override</a>

public String doInBackground() {

While(true){
}

   return;
   }

   @Override
   protected void done() {
      //faz alguma coisa ao fim do while...    
   }

}

(new CodigoComWhile()).execute();

Criado 5 de dezembro de 2010
Ultima resposta 5 de dez. de 2010
Respostas 2
Participantes 3