Newsgroup: it.comp.java
Titolo: Comeaccederealla classe padre

Devo realizzare un Sistema di Talk multiutente, in pratica un'applicazione
Client/Server che permetta la realizzazione di un talk multiutente...
Sapete indicarmi qualche indirizzo dove trovare un pò di materiale???
Comunque...
Sto utilizzando il JBuilder 2 e ho un problema...
Attualmente queste sono le 3 classi scritte finore:
Application1.java
=============
package untitled6;
import com.sun.java.swing.UIManager;
import java.net.*;
import java.io.*;
public class Application1
{
  boolean packFrame = false;
  //Construct the application
  public Application1() throws IOException
  {
    Frame1 frame = new Frame1();
    //Validate frames that have preset sizes
    //Pack frames that have useful preferred size info, e.g. from their
layout
    if (packFrame)
      frame.pack();
    else
      frame.validate();
    frame.setVisible(true);
    frame.avviaserver();
  }
//Main method
  public static void main(String[] args) throws IOException
  {
    try  {
      UIManager.setLookAndFeel(new
com.sun.java.swing.plaf.windows.WindowsLookAndFeel());
      //UIManager.setLookAndFeel(new
com.sun.java.swing.plaf.motif.MotifLookAndFeel());
      //UIManager.setLookAndFeel(new
com.sun.java.swing.plaf.metal.MetalLookAndFeel());
    }
    catch (Exception e)
    {
    }
      new Application1();
  }
}
Frame1.java
==========
package untitled6;
import java.awt.*;
import borland.jbcl.layout.*;
import borland.jbcl.control.*;
import java.io.*;
import java.net.*;
import java.awt.event.*;
public class Frame1 extends DecoratedFrame
{
  XYLayout xYLayout1 = new XYLayout();
  TextAreaControl textArea = new TextAreaControl();
  ButtonControl buttonControl1 = new ButtonControl();
  public Frame1()
  {
    try
    {
      jbInit();
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }
  private void jbInit() throws IOException
  {
    this.setTitle("Frame1");
    this.setLayout(xYLayout1);
    this.setSize(393,304);
    xYLayout1.setHeight(304);
    xYLayout1.setWidth(393);
    this.add(textArea, new XYConstraints(6, 6, 370, 208));
  }
  public void avviaserver() throws IOException
  {
       textArea.setText("Avvio server....\n");
       ServerSocket serverSocket = null;
       boolean listening = true;
       try
       {
           serverSocket = new ServerSocket(4444);
       }
       catch (IOException e)
       {
           System.err.println("Could not listen on port: 4444.");
           System.exit(-1);
       }
       textArea.setText(textArea.getText() + "Server avviato.\n");
       while (listening)
       {
          new StartServerThread(serverSocket.accept()).start();
          textArea.setText(textArea.getText() + "Si è connesso un nuovo
Client\n");
       }
       serverSocket.close();
  }
}
StartServerThread.java
=================
package untitled6;
import java.net.*;
import java.io.*;
public class StartServerThread extends Thread
{
  private Socket socket = null;
  public StartServerThread(Socket socket)
  {
    super("StartServerThread");
    this.socket = socket;
  }
  public void run()
  {
     try
      {
       PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
       BufferedReader in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
       String inputLine, outputLine;
        while ((inputLine = in.readLine()) != null)
        {
          outputLine = inputLine;
          out.println(outputLine);
        }
        out.close();
        in.close();
        socket.close();
      }
      catch (IOException e)
      {
        e.printStackTrace();
      }
   }
}
In pratica nella classe Frame1 creo un nuovo Thread (StartServerThread) ogni
qualvolta un nuovo client si connette alla porta 4444..
La classe StartServerThread non fa altro che fare un semplice echo..
Il mio problema è questo: da dentro la classe StartServerThread come posso
accedere al frame principale???
Ossia se ad esempio volessi visualizzare nella textArea del Frame1 ogni
messaggio che viene inviato dal client come faccio???
Grazie
Andrea

Andrea Sistarelli wrote:

Prova a registrare la classe padre come ascoltatore di eventi nel momento in
cui crei un thread passandogli la reference
del padre. Dota il padre di un metodo tipo messageIncoming(MessageEvent e) cosi
ogni thread puo notificare il padre
con un oggetto MessageEvent che deve contenere almeno una String con il
messaggio. Devi definire tu la classe MessageEvent.

 > messaggio che viene inviato dal client come faccio???
Se la definisci come inner class (dentro la classe principale), puoi
accedere ai metodi e variabili della classe base