Server - für jeden Client ein Serverthread

sliceX

Mitglied
Hallo zusammen!
Ich bin momentan gerade dabei ein kleines Java AWT-Programm mit Client-Server Architektur zu erstellen.

Das Programm enthält die Klassen:

Server: Läuft auf einem eigenständigen Thread um Clients zu akzeptieren
ServerThread: Für jeden akzeptierten Client wird ein eigener Server-Thread erstellt
Client

Des Weiteren gibt es noch:
ClientFenster: GUI für Clienten
ServerFenster: GUI für Server
MeinDialog: Notwendig für Pop-Ups in GUI-Fenstern.

Der Client kann momentan Personen aufnehmen, anzeigen und als (.CSV) Datei abspeichern. Anschließend kann die Datei wieder eingelesen werden. Die Funktionen für die Aufnahme und Anzeige von Personen befinden sich in der Client-Klasse. Die Funktionen Datei speichern sowie Datei laden befinden sich in der Server-Klasse.

1. Im Clienten wird die Funktion menueAuswahl(int auswahl) aufgerufen (Funktion enthält eine switch-case Anweisung)
2. Der passende case-Nummer wurde vorher über die Client-GUI übergeben
3. Die case-Nummer wird anschließend über einen einfachen Outputstream ( out.write() ) vom Client auf einen Socket geschrieben. Die ServerThread-Klasse empfängt die case-Nummer mit einem einfachen in.read() und wählt in ihrer eigenen switch-case Anweisung den passenden Case und damit die entsprechende Funktion aus.

Erwähnenswert sind noch die Methoden toInputStream() und toOutputStream() (enthält ObjectInput bzw. ObjectOutputStreams).

Es werden bspw. die vom Client erstellten Personenobjekte sowie ein paar andere benötigte Variablen (Dateiverzeichnis, Dateiname) über toOutputStream() an den Server schickt, welcher die Daten über den toInputStream() empfängt. Der Server schickt die die aus der geladenen Datei gespeicherten Personenobjekte wiederum über toOutputStream() über den Socket an den Clienten.

Was funktioniert?

An sich funktioniert das Programm insofern, dass sich ein Client mit dem Server verbinden kann und der Client Personen speichert und abruft. Hier gibt es keinerlei Probleme.

Nachfolgend das Problem:

Sobald sich aber bspw. 2 oder Clienten mit dem Server verbinden und beide Clienten gleichzeitig eine Datei speichern oder laden möchten (sprich, mit dem Server kommunizieren), friert eines der beiden Client-Fenster ein.

Ich bin mir sicher, dass ich mich mit den Streams etwas verhauen habe, sprich dass die Streams vom ersten Clienten die Streams vom zweiten, parallel laufenden, blockieren. Ich komme aber einfach nicht dahinter wo der Fehler liegt.

Ich bin mit meinem Latein gerade am Ende und wäre äußerst dankbar, wenn sich jemand von euch die Sache mal anschauen und mir zeigen könnte, wo ich mich verhaspelt habe.


Nachfolgend der Code:

Den Code gibt es hier auch aufgeteilt: https://www.file-upload.net/gal-246339/otvkhz/1.html

Und hier als vollständiges Eclipse-Projekt: https://www.file-upload.net/download-13169109/ADRELI_4_CON.rar.html


Server-Klasse + ServerThread-Klasse:
Java:
/*
 * Copyright (c) 2018
 * Client.Java
 * @author J. Timmer
 * @version 1.7
 *
 */
package adreli_4_con;
import java.net.*;
import java.io.*;
import java.util.*;
public class Server extends Thread //Server mit Multithreading (je Client ein Thread)
{
    static int serverPort = 0;
    ServerSocket serverSocket;
    ServerThread serverThread;
    ArrayList<ServerThread> threadList = new ArrayList<ServerThread>();
    static int clientDisconnected;
 
 
    /**
    * @param args
    *   
    * @throws IOException
    * @version 2018.11.24
    */
 
    public void run(){        
        int clients = 0; // durchnummerierung der Clients
        // Server-Socket einstellen und an Port mit binden
        try {
            serverSocket = new ServerSocket(serverPort);
        } catch (IOException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }
        System.out
                .println("...Server wurde gestartet, "
                        + "warte auf Client-Verbindungen");
        while (true) { // wenn keine Verbindung
            // hergestellt werden soll wird accept() blockiert
            try {
                serverThread = new ServerThread(serverSocket.accept(),
                        ++clients, serverSocket);
            }
            catch (SocketException e) {
                break;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                break;
            }
            serverThread.start();
            System.out.println("...warte auf weitere Client-Verbindungen");
    
        }
    }
 
    public void stoppen() throws IOException {
        try {
            this.serverSocket.close();
        } catch (NullPointerException e) {
    
        }
        if(ServerThread.clientSocket != null) {
        ServerThread.clientSocket.close();
        }
        try {
            for (ServerThread threads : threadList)
                 threads.interrupt();
      
        } catch (Exception e) {
            // TODO Auto-generated catch block
            System.out.println("Server konnte nicht gestoppt werden!");
        }
        this.interrupt();
    }
}
class ServerThread extends Thread
{ // ServerThread
 
    static public int persCounter = 0; //zaehlt die erfassten Personen
    static public int eingelesen = 0;
    static String directory = null;
    static String fileName = null;
    int serverStatus = 1;
 
    //Puffer fuer erfassen der Personendaten
    static String myNewPerson[] = new String[9];
 
    //Puffer fuer die gesammelten Daten
    static String myPersons[][] = new String[10][9];
 
    LinkedList<Person> myPersonObjects = new LinkedList<>();
 
    //Sockets & Streams
    public static Socket clientSocket;
    ServerSocket serverSocket;
    private static InputStream in;
    static OutputStream out;
 
    int clientNumber; // zugewiesene Nummer des verbundenen Clients
 
    /**
    * @param clientSocket Socket über den gestreamt wird
    * @param clientNumber Durchnummerierung der Clients für leichtere Zurodnung
    * @throws IOException
    */
    public ServerThread(Socket clientSocket, int clientNumber, ServerSocket serverSocket)
            throws IOException {
        this.clientSocket = clientSocket;
        this.clientNumber = clientNumber;
        this.serverSocket = serverSocket;
        in = clientSocket.getInputStream();
        out = clientSocket.getOutputStream();
        clientNumber -= Server.clientDisconnected;
        System.out.println("--> Client " + clientNumber + " angemeldet");
 
    }
 
    public void run() {
 
        boolean dauer=true;
        int eingabe = 0;
 
        while (dauer != false){
    
            try {
        
                toInputStream();
        
                try {
            
                eingabe = in.read();
                }
                catch (SocketException e) {
            
                    break;
        
                }
                switch (eingabe) {
    
                case 3: //Records in Datei sichern
                    personSpeichern();
 
                break;
                case 4: //Records aus Datei laden
                    dateiEinlesen();
            
                    toOutputStream();
                break;
        
                case 8: //Serverstatusanfrage von Client
                    toOutputStream();
                break;
                }
 
            } catch(IOException e) {        
                e.printStackTrace();
            }
        }    
    }
 
 
 
    /**
    *
    * Die vom View-Thread uebergebene Linked-List mit Personenobjekten wird
    * direkt ausgelesen und die Inhalte in eine Random Access File
    * geschrieben (auf das uebertragen der Inhalte der aus dem Socket geholten
    * Linked-List in ein String-Array wird aus Perfomancegruenden verzichtet).
    *
    */
    private void personSpeichern() throws IOException { //funct_3()
 
        System.out.println("Hier ist die Funktion personSpeichern()");
 
        //betriebsspezifische Lineoperator, / oder \, je nach Betriebssystem
        final String NEWLINE = System.getProperty("line.separator");
    
        RandomAccessFile raf;
        raf = new RandomAccessFile(directory+fileName, "rw");
        try {
            for (int i = 0; i < persCounter; i++) {// Schreib-Schleife
        
                raf.writeBytes(myPersonObjects.get(i).getName());
                raf.writeBytes(";");
                raf.writeBytes(myPersonObjects.get(i).getVorname());
                raf.writeBytes(";");
                raf.writeBytes(myPersonObjects.get(i).getAnrede());
                raf.writeBytes(";");
                raf.writeBytes(myPersonObjects.get(i).getStrasse());
                raf.writeBytes(";");
                raf.writeBytes(myPersonObjects.get(i).getPlz());
                raf.writeBytes(";");
                raf.writeBytes(myPersonObjects.get(i).getOrt());
                raf.writeBytes(";");
                raf.writeBytes(myPersonObjects.get(i).getTelefon());
                raf.writeBytes(";");
                raf.writeBytes(myPersonObjects.get(i).getFax());
                raf.writeBytes(";");
                raf.writeBytes(myPersonObjects.get(i).getBemerkung());
                raf.writeBytes(NEWLINE);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        finally
        {
            try {
                raf.close();
            }
            catch(IOException e)
            {
                System.out.println("Filewriter konnte"
                        + " nicht geschlossen werden!");
                e.printStackTrace();
            }
        }
    }
 
 
    /**
    * Records aus der Datei Adreli.CSV werden eingelesen und in
    * das String-Array myPersons[][] geladen.
    * Die Datei wird zeilenweise gelesen, wobei die
    * eingelese Zeile zunaechst in das
    * String-Array myNewPerson[] geschrieben wird.
    * Dieser Zeilenpuffer wird mit
    * der Methode split() (class RandomAccessFile) in Einzelfelder zerlegt.
    * Einzelfelder sind durch ";" getrennt.
    * Mit diesen Einzelfeldern wird dann der Gesamtpuffer myPersons[][]
    * aufgebaut/gefuellt.
    *
    * Anschließend werden mit den Personendaten der String-Matrix
    * Personenobjekte ueber arrayToObject() erstellt und in die Linked-List
    * myPersonobjects uebertragen.
    */
    private void dateiEinlesen() { //funct_4() Records aus Datei laden
 
        System.out.println("Hier ist die Funktion dateiEinlesen()");
 
        eingelesen = 0; //eingelesene Personen
        persCounter = 0; //"persCounter" ist größer als "eingelesen", da
                        //"eingelesen" nicht die beim Clienten aufgenommenen
                        //Personen berücksichtigt, die Differenz zwischen
                         //"persCounter" und "eingelesen" wird später bei der
                         //korrekten Auswahl der Konsolenausgabe benötigt
        int zeile = 0; //Zeilen-Index fuer unsere Puffermatrix myPersons[][]
        Scanner einlesen = null; //leeres Scanner-Objekt
        try {//Scanner-Objekt einlesen
            einlesen = new Scanner(new File(directory+fileName));
        } catch (FileNotFoundException e) {
                    
        }
 
 
        try {
            while (einlesen.hasNextLine()) //Pruefung, ob Zeile vorhanden
            {
                String myLine = einlesen.nextLine(); //Zeile aus Datei holen
                if (myLine == null)
                    break;
                myNewPerson = myLine.split(";"); //myLine aufgeteilt
                for (int i = 0; i < myNewPerson.length; i++) {
                    myPersons[zeile][i] = myNewPerson[i];
                }
                persCounter++;
                eingelesen++;
                zeile++; //Zeilenzaehler erhöhen
            }
        } catch (ArrayIndexOutOfBoundsException ex) {
            System.out.println();
            System.out.println(
                    "Es können nur nicht-nummerierte "
                            + "Dateien eingelesen werden!");
            System.out.println();
        }
 
        arrayToObject();
    }//end of dateiEinlesen()
 
 
    /**
    *
    * Nach einlesen der Inhalte der Datei wurden die Daten zunaechst in einer
    * String-Array-Matrix gespeichert, mit der Funktion arrayToObject() werden
    * die Inhalte des String-Arrays in Personen-Objekte uebertragen und
    * in eine Linked-List gespeichert. Die Linked-List wird anschließend
    * mithilfe von outputStream() auf den Socket geschrieben.
    *
    */
    public void arrayToObject() {
 
        for(int a = myPersonObjects.size(); a < persCounter; a++) {
    
            Person p = new Person();
    
            p.setName(myPersons[a][0]);
            p.setVorname(myPersons[a][1]);
            p.setAnrede(myPersons[a][2]);
            p.setStrasse(myPersons[a][3]);
            p.setPlz(myPersons[a][4]);
            p.setOrt(myPersons[a][5]);
            p.setTelefon(myPersons[a][6]);
            p.setFax(myPersons[a][7]);
            p.setBemerkung(myPersons[a][8]);
        
            myPersonObjects.add(p);
        }
    }
 
    /**
    * Befuellte LinkedList ueber ObjectOutputStream senden
    */
    public void toOutputStream()
    {
        System.out.println("Hier ist die Funktion toInputStream(), Server");
        try
        {
            ObjectOutputStream ou2 = new ObjectOutputStream(out);
            ou2.writeObject(myPersonObjects);
            ou2.writeObject(serverStatus);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
 
    /**
    * Befuellte LinkedList (zwecks schreiben in Datei)
    * ueber ObjectInputStream erhalten.
    *
    * Nach dem auslesen des Sockets wird direkt persCounter aktualisiert,
    * damit alle Funktionen die persCounter implementiert
    * haben mit dem korrekten Zählerstand hinsichtlich der
    * gespeicherten Personen arbeiten können.
    */
    public void toInputStream()
    {
        System.out.println("Hier ist die Funktion toOutputStream(), Server");
        try
        {
            ObjectInputStream oi2 = new ObjectInputStream(in);
            myPersonObjects = (LinkedList <Person>) oi2.readObject();
            persCounter = myPersonObjects.size();
            directory = (String) oi2.readObject();
            fileName = (String) oi2.readObject();
    
        } catch (SocketException e) {
    
        } catch (IOException | ClassNotFoundException e) {
 
        }
    }
}  // ServerThread

Client-Klasse
Java:
/*
 * Copyright (c) 2018
 * Client.Java
 * @author Jan Timmer
 * @version 1.7
 *
 */
package adreli_4_con;
import java.io.*;
import java.net.*;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
public class Client
{
 
    static private boolean go_on = true;
 
    static public int persCounter = 0;
 
    static int eingabe = 0;
 
    static String myNewPerson[] = new String[9];
 
    static String myPersons[][] = new String[10][9]; //String-Matrix Puffer
 
    //LinkedList wird später mithilfe der StringMatrix befuellt und
    //auf Socket geschrieben
    static LinkedList<Person> myPersonObjects = new LinkedList<>();
 
    static String ip;
    static int port = 0;
    static int serverStatus = 0;
 
    static String directory = null;
    static String fileName = null;
    static int fileSavedorOpened = 0;
 
    Socket clientSocket = null;
 
    static InputStream in;
 
    static OutputStream out;
 
    //Hilfsgrössen/Hilfskonstanten
    final static int NAME = 0;
    final static int VORNAME = 1;
    final static int ANREDE = 2;
    final static int STRASSE = 3;
    final static int PLZ = 4;
    final static int ORT = 5;
    final static int TELEFON = 6;
    final static int FAX = 7;
    final static int BEMERKUNG = 8;
 
 
      /**
    * @param args
    * @throws IOException
    */
    public void starten() throws IOException
    {
 
        File f = new File("Adreli.csv"); //prüft, ob Datei vorhanden
                                        //wenn ja, wird vor der Ausführung von
                                        //personAufnehmen() die Datei
                                        //automatisch eingelesen
                                        //(siehe case 1 im Switch)
 
        try {//Abfrage der IP des Servers
    
                try{            
                    clientSocket = new Socket(ip, port);
                    
                        in = clientSocket.getInputStream();
                        out = clientSocket.getOutputStream();
                        ClientFenster.lblMenueInfoUeberschrift2.setText("Verbindung hergestellt!");
                    
                } catch(ConnectException e) {
            
                    ClientFenster.lblMenueInfoUeberschrift2.setText("Verbindung nicht möglich!");
            
                } catch(IllegalArgumentException e) {
            
                    ClientFenster.lblMenueInfoUeberschrift2.setText("Portnummer ungültig!");
            
                }
 
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
            }
    }
        
        public void menueAuswahl(int auswahl) {
    
                eingabe = auswahl;
            
                try {
                    switch (eingabe) {
                    case 1:
                        personAufnehmen();//Personen in
                                          //myNewPerson[] aufnehmen
                        arrayToObject();
                        break;
                    case 3: //Records in Datei sichern
                        fileSavedorOpened = 1;
                        toOutputStream();
                        out.write(eingabe);
                        ClientFenster.lblMenueInfoUeberschrift2.setText("Datei gespeichert!");
                        break;
                    case 4: //Records aus Datei laden
                        fileSavedorOpened = 1;
                        toOutputStream();
                        out.write(eingabe);
                        out.flush();
                        toInputStream();
                        ClientFenster.lblMenueInfoUeberschrift2.setText("Datei geladen!");
                        break;
                    case 8: //Serverstatus abfragen
                            toOutputStream();
                            out.write(eingabe);
                            toInputStream();
                        break;
                    }
 
                } catch(SocketException e) {
            
                    serverStatus = 2;
            
                } catch(IOException e) {
                    e.printStackTrace();
                }
            }
 
 
 
    /**
    * Die Person wird zunaechst ueber Funktion 1
    * auf der Konsole abgefragt und anschließend in
    * einem einfachem Array gespeichert. Mit Funktion 2 werden die Inhalte des
    * einfachen Arrays in eine Matrix uebernommen.
    * Anschließend werden mit arrayToObject() die Matrixinhalte
    * in Personenobjekte uebertragen und die Objekte darauffolgend in einer
    * Linked-List gespeichert. Die mit Personenobjekten
    * gefuellte Linked-List wird dann bei Aufruf einer entsprechenden Funktion
    * mithilfe von outputStream() auf den Socket geschrieben.
    *
    * Die Form der Personendaten ist durch die Nutzung von Patterns
    * vorgeschrieben.
    */
    public static void personAufnehmen(){ //Funktion 1
 
        System.out.println("Hier ist die Funktion personAufnehmen(), Client");
 
        boolean loop = true; //steuert die folgende while-Schleife
        boolean ok = false;
        boolean nochmal = false;
        int error = 0;
 
    
            try {
    
                String a ="[A-ZÄÖÜ]{1}([a-zäöüß]+)(\\s(\\-|";
                String b ="(von))\\s[A-ZÄÖÜ]{1}([a-zäöüß]+))?";
                String c = a+b;
                Pattern namePattern = Pattern.compile(c);
                Pattern vornamePattern = Pattern.compile("([A-Z]{1}[a-z]+)+");
                Pattern anredePattern = Pattern.compile("((Herr)|(Frau))");
                a = "[A-Z]{1}[a-z]+(\\.|\\-|\\s){1}[A-Z]{0,1}[a-z]*";
                b = "(\\.?\\-?)(Str.)?[1-9]+[0-9]?";
                c = "(([a-z]|\\-?|([1-9][0-9]))?)";
                String d = a + b + c;
                Pattern strassePattern = Pattern.compile(d);
                Pattern plzPattern = Pattern.compile("([A-Z]{1,2}\\-)"
                        + "?[0-9]{4,5}");
                //4 oder 5-stellige PLZ
                a ="^[a-zäöüßA-ZÄÖÜ]+(?:[\\s-]";
                b = "[a-zäöüßA-ZÄÖÜ]+)*$";
                c = a + b;
                Pattern ortPattern = Pattern.compile(c);
                a = "(?:\\(\\+?\\d+\\)|\\+?\\d+)";
                b = "(?:\\s*[\\-\\/]*\\s*\\d+)+";
                c = a + b;
                Pattern telefonPattern = Pattern.compile(c);
                Pattern faxPattern = Pattern.compile(c);
                //Fuer den Vergleich werden fuer jedes Attribut
                //je 2 Variablen erstellt
                String xName;
                String xVorname;
                String xAnrede;
                String xStrasse;
                String xPLZ;
                String xOrt;
                String xTelefon;
                String xFax;
        
                Matcher yName;
                Matcher yVorname;
                Matcher yAnrede;
                Matcher yStrasse;
                Matcher yPLZ;
                Matcher yOrt;
                Matcher yTelefon;
                Matcher yFax;
        
                //Name
        
                    xName = ClientFenster.txtName.getText();
                    yName = namePattern.matcher(xName);
                    if(yName.matches())
                    {
                        myNewPerson[0] = xName;
                
                    }else
                    {
                
                        ClientFenster.lblPers_NameAusgabe.setText("Eingabe ungueltig! "
                                + "Erster Buchstabe groß?");
                        error = 1;
                    }
        
                //Vorname
            
                    xVorname = ClientFenster.txtVorname.getText();
                    yVorname = vornamePattern.matcher(xVorname);
                    if(yVorname.matches())
                    {
                        myNewPerson[1] = xVorname;
                
                    }
                    else
                    {            
                        ClientFenster.lblPers_VornameAusgabe.setText("Eingabe ungueltig! "
                                + "Erster Buchstabe groß?");
                        error = 1;
                    }
        
                //Anrede
        
                    xAnrede = ClientFenster.txtAnrede.getText();
                    yAnrede = anredePattern.matcher(xAnrede);
                    if(yAnrede.matches())
                    {
                        myNewPerson[2] = xAnrede;
                
                    }
                    else
                    {
                
                        ClientFenster.lblPers_AnredeAusgabe.setText("Eingabe ungueltig! Zulässig: Herr/Frau");
                        error = 1;
                    }
        
                //Straße
                    xStrasse = ClientFenster.txtStrasse.getText();
                    yStrasse = strassePattern.matcher(xStrasse);
                    if(yStrasse.matches())
                    {
                        myNewPerson[3] = xStrasse;
            
                    }
                    else
                    {        
                        ClientFenster.lblPers_StrasseAusgabe.setText("Eingabe ungueltig! "
                                + "Erster Buchstabe groß?");
                        error = 1;
                    }
        
                //PLZ
        
                    xPLZ = ClientFenster.txtPLZ.getText();
                    yPLZ = plzPattern.matcher(xPLZ);
                    if(yPLZ.matches())
                    {
                        myNewPerson[4] = xPLZ;
                
                    }
                    else
                    {        
                        ClientFenster.lblPers_PLZAusgabe.setText("Eingabe ungueltig! Korrekte PLZ?");
                        error = 1;
                    }
        
                //Ort
        
                    xOrt = ClientFenster.txtOrt.getText();
                    yOrt = ortPattern.matcher(xOrt);
                    if(yOrt.matches())
                    {
                        myNewPerson[5] = xOrt;
        
                    }
                    else
                    {        
                        ClientFenster.lblPers_OrtAusgabe.setText("Eingabe ungueltig! "
                                + "Erster Buchstabe groß?");
                        error = 1;
                    }
        
                //Telefon
        
                    xTelefon = ClientFenster.txtTelefon.getText();
                    yTelefon = telefonPattern.matcher(xTelefon);
                    if(yTelefon.matches())
                    {
                        myNewPerson[6] = xTelefon;
                
                    }
                    else
                    {        
                        ClientFenster.lblPers_TelefonAusgabe.setText("Eingabe ungueltig!");
                        error = 1;
                    }
        
                //Fax
        
                    xFax = "4423443";
                    yFax = faxPattern.matcher(xFax);
                    if(yFax.matches())
                    {
                        myNewPerson[7] = xFax;
            
                    }
                    else
                    {        
                        ClientFenster.lblPers_FaxAusgabe.setText("Eingabe ungueltig!");
                        error = 1;
                    }
        
                //Bemerkung
            
                    myNewPerson[8] = ClientFenster.txtBemerkung.getText();
                    
            }
    
            catch (PatternSyntaxException ex) {
        
            }    
                
        if(error == 0) {
        matrix_befuellen();
        ClientFenster.lblPersonAufnahme_InfoBox.setText("Person Nr. " +Client.persCounter
                +" aufgenommen!");
        }
        else {
    
            ClientFenster.lblPersonAufnahme_InfoBox.setText("Person konnte "
                    + "nicht aufgenommen werden. Eingaben überprüfen!");
        }
    }//end of personAufnehmen()
 
 
    private static void matrix_befuellen() { //Funkt 2 myPersons[][] Zeilen
                                            //fuellen
 
        for (int i = 0; i < myNewPerson.length; i++) {
            myPersons[persCounter][i] = myNewPerson[i];    
        }
        persCounter++;
    }//end of matrix_befuellen()
 
 
    /**
    *
    * Die Inhalte der Matrix werden ausgelesen und in einzelne
    * Personenobjekte uebertragen. Anschließend werden die Personenobjekte
    * in einer Linked-List gespeichert.
    *
    */
    public static void arrayToObject() { //Hilfsmethode
 
 
        for(int a = myPersonObjects.size(); a < persCounter; a++) {
    
            Person p = new Person();
    
            p.setName(myPersons[a][0]);
            p.setVorname(myPersons[a][1]);
            p.setAnrede(myPersons[a][2]);
            p.setStrasse(myPersons[a][3]);
            p.setPlz(myPersons[a][4]);
            p.setOrt(myPersons[a][5]);
            p.setTelefon(myPersons[a][6]);
            p.setFax(myPersons[a][7]);
            p.setBemerkung(myPersons[a][8]);
        
            myPersonObjects.add(p);
        }
    }//end of arrayToObject()
 
 
    public static void toOutputStream()
    {
        System.out.println("Hier ist die Funktion toOutputStream(), Client");
        try
        {
            ObjectOutputStream ou1 = new ObjectOutputStream(out);
            ou1.writeObject(myPersonObjects);
            ou1.writeObject(directory);
            ou1.writeObject(fileName);
    
        } catch (SocketException e) {
            ClientFenster.lblMenueInfoUeberschrift2.setText("Server killed!");
    
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
 
    /**
    *
    * Nach dem auslesen des Sockets wird direkt persCounter aktualisiert,
    * damit alle Funktionen die persCounter implementiert haben mit dem
    * korrekten Zählerstand hinsichtlich der gespeicherten
    * Personen arbeiten können.
    *
    */
    public static void toInputStream()
    {
        System.out.println("Hier ist die Funktion toInputStream(), Client");
        try
        {
    
            ObjectInputStream oi1 = new ObjectInputStream(in);
            myPersonObjects = (LinkedList <Person>) oi1.readObject();
            persCounter = myPersonObjects.size();
            serverStatus = (int) oi1.readObject();
        } catch (IOException | ClassNotFoundException ex) {
            ex.printStackTrace();
        }
    }
}

ServerFenster Klasse
Java:
/*
 * Copyright (c) 2018
 * Client.Java
 * @author Jan Timmer
 * @version 1.7
 *
 */
package adreli_4_con;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class ServerFenster extends Frame implements ActionListener, ItemListener{
    Button btnKonfigAbsenden;
    Button btnPortÄndern;
    Button btnServerStart;
    Button btnServerFunktionen;
    Button btnZurueckServerFunktionen;
    Button btnDatenbasis;
    Button btnDatenbank;
    Button btnTextdatei;
    Button btnZurueckDatenbasis;
    Button btnServerStopp;
    Button btnServerlog;
    Button btnZurueckServerLog;
    Button btnBeenden;
 
    Label lblPortEingabe;
    Label lblHauptmenueUeberschrift;
    Label lblmenueInfoUeberschrift;
    Label lblDatenbasis;
    Label lblServerLog;
    Label lblAktuellerPort;
    static Label lblmenueInfoUeberschrift2;
 
    TextField txtPortEingabe;
    static TextField txtServerStartInfoAusgabe;
    static TextField txtServerStoppInfoAusgabe;
    TextArea txtServerLogAusgabefeld;
    Server s1 = new Server();
 
    String logCompleteToString = new String();
 
    int serverStatus = 0;
 
    public static void main(String[] args) throws IOException {
 
        ServerFenster fenster = new ServerFenster();
 
    }
 
 
    public ServerFenster()
    {
        setTitle("Server-Assistent V1.0");
        this.setSize(700, 300);
        this.setLocation(600, 300);
        this.setBackground(Color.DARK_GRAY);
        this.setLayout(null);
        MenuBar mnuBar = new MenuBar();
        this.setMenuBar(mnuBar);
 
        lblHauptmenueUeberschrift = new Label();
        lblHauptmenueUeberschrift.setSize(226,23);
        lblHauptmenueUeberschrift.setLocation(60, 40);
        lblHauptmenueUeberschrift.setFont(new Font("Times New Roman", Font.PLAIN, 22));
        lblHauptmenueUeberschrift.setText("Server Mission Control");
        lblHauptmenueUeberschrift.setBackground(Color.DARK_GRAY);
        lblHauptmenueUeberschrift.setForeground(Color.white);
        this.add(lblHauptmenueUeberschrift);
 
        lblmenueInfoUeberschrift = new Label("Anzahl Clients:");
        lblmenueInfoUeberschrift.setSize(140, 23);
        lblmenueInfoUeberschrift.setLocation(520, 65);
        lblmenueInfoUeberschrift.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        lblmenueInfoUeberschrift.setBackground(Color.GRAY);
        lblmenueInfoUeberschrift.setForeground(Color.white);
        this.add(lblmenueInfoUeberschrift);
 
        lblmenueInfoUeberschrift2 = new Label("0");
        lblmenueInfoUeberschrift2.setSize(140, 23);
        lblmenueInfoUeberschrift2.setLocation(520, 88);
        lblmenueInfoUeberschrift2.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        lblmenueInfoUeberschrift2.setBackground(Color.LIGHT_GRAY);
        lblmenueInfoUeberschrift2.setForeground(Color.black);
        this.add(lblmenueInfoUeberschrift2);
 
        this.setVisible(true);
 
        showHauptmenueFenster();
 
        this.addWindowListener(new WindowAdapter()
        {
        public void windowClosing(WindowEvent we)
        {
        System.exit(0);
        }
        });
    }
 
 
    public void showHauptmenueFenster() {
 
        serverFunktionen();
        auswahlDatenbasis();
        btnServerlog();
        btnBeenden();
    }
 
 
    public void serverFunktionen(){
 
        btnServerFunktionen = new Button("Serverfunktionen");
        btnServerFunktionen.setCursor(new Cursor(Cursor.HAND_CURSOR));
        btnServerFunktionen.setBounds(300,100, 100, 23);
        this.add(btnServerFunktionen);
        btnServerFunktionen.addActionListener(this);  
    }
 
 
    public void serverStart(){
 
        btnServerStart = new Button("Serverstart");
        btnServerStart.setCursor(new Cursor(Cursor.HAND_CURSOR));
        btnServerStart.setBounds(200,120, 100, 23);
        this.add(btnServerStart);
        btnServerStart.addActionListener(this);
        txtServerStartInfoAusgabe = new TextField("Server gestoppt!");
        txtServerStartInfoAusgabe.setSize(150,23);
        txtServerStartInfoAusgabe.setLocation(330, 120);
        txtServerStartInfoAusgabe.setBackground(Color.red);
        //serverStartAusgabe.setForeground(Color.white);
        txtServerStartInfoAusgabe.setFont(new Font("Arial", Font.BOLD, 12));
        txtServerStartInfoAusgabe.setEditable(false);
        this.add(txtServerStartInfoAusgabe);
 
        btnKonfigAbsenden = new Button("Aendern");
        btnKonfigAbsenden.setCursor(new Cursor(Cursor.HAND_CURSOR));
        btnKonfigAbsenden.setBounds(500,170, 100, 23);
        btnKonfigAbsenden.setFont(new Font("Arial", Font.BOLD, 12));
        this.add(btnKonfigAbsenden);
        btnKonfigAbsenden.addActionListener(this);
 
        lblPortEingabe = new Label("Port eingeben:", Label.CENTER);
        lblPortEingabe.setSize(100, 23);
        lblPortEingabe.setLocation(200,170);
        lblPortEingabe.setBackground(Color.white);
        this.add(lblPortEingabe);
 
        txtPortEingabe = new TextField("56789");
        txtPortEingabe.setSize(150, 23);
        txtPortEingabe.setLocation(330, 170);
        add(txtPortEingabe);
 
        lblAktuellerPort = new Label("Aktueller Server Port: " +s1.serverPort);
        lblAktuellerPort.setSize(155,23);
        lblAktuellerPort.setLocation(250, 200);
        lblAktuellerPort.setBackground(Color.DARK_GRAY);
        lblAktuellerPort.setForeground(Color.white);
        this.add(lblAktuellerPort);
    }
 
 
    public void serverStopp(){
        btnServerStopp = new Button("Serverstopp");
        btnServerStopp.setCursor(new Cursor(Cursor.HAND_CURSOR));
        btnServerStopp.setBounds(200,120, 100, 23);
        this.add(btnServerStopp);
        btnServerStopp.addActionListener(this);
 
        txtServerStoppInfoAusgabe = new TextField("Server gestartet!");
        txtServerStoppInfoAusgabe.setSize(150,23);
        txtServerStoppInfoAusgabe.setLocation(330, 120);
        txtServerStoppInfoAusgabe.setBackground(Color.green);
        txtServerStoppInfoAusgabe.setFont(new Font("Arial", Font.BOLD, 12));
        txtServerStoppInfoAusgabe.setEditable(false);
        this.add(txtServerStoppInfoAusgabe); 
    }
 
 
    private void btnServerlog() {
 
        btnServerlog = new Button("Serverlog");
        btnServerlog.setCursor(new Cursor(Cursor.HAND_CURSOR));
        btnServerlog.setBounds(300,150, 100, 23);
        this.add(btnServerlog);
        btnServerlog.addActionListener(this);
    }
 
 
    private void ServerLogFenster()
    {
        //Die Buttons werden angezeigt.
 
        //Ein String fuer den Textfeldinhalt wird eingefuehrt.
        String logKomplett = new String();
 
        //Das Label fuer das Log-File wird angezeigt.
        lblServerLog = new Label("Server-Log");
        lblServerLog.setForeground(Color.white);
        lblServerLog.setBackground(Color.GRAY);
        lblServerLog.setFont(new Font("Arial", Font.BOLD, 12));
        lblServerLog.setSize(70, 23);
        lblServerLog.setLocation(300, 90);
        this.add(lblServerLog);
 
        //Die Textarea wird angelegt.
        txtServerLogAusgabefeld = new TextArea();
        txtServerLogAusgabefeld.setSize(450, 200);
        txtServerLogAusgabefeld.setLocation(120, 125);
 
        try
        {
            //Textfile entählt alle Serverlogs
            RandomAccessFile file =
            new RandomAccessFile("ServerLogfile.txt", "rw");
    
            RandomAccessFile file2 =
                    new RandomAccessFile("ServerLogfile.txt", "rw");
    
            int lineNumber = 0;
    
            //Anzahl der Zeilen wird gezählt
            while (file2.readLine() != null){
                lineNumber++;
                }
    
            System.out.println("linenumber " +lineNumber);
    
            //Alle vorhandenen Zeilen werden eingelesen und in einem String
            //gespeichert
            for (int i =0;i < lineNumber;i++)
            {
                logKomplett = logKomplett + file.readLine()+ "\n";
            }
    
        }
        catch(IOException io)
        {
        }
 
        //Im großen Anzeigefeld wird der zuvor befüllte String angezeigt
        txtServerLogAusgabefeld.setText(logKomplett);
        this.add(txtServerLogAusgabefeld);
    }
 
 
    public void auswahlDatenbasis() {
 
        btnDatenbasis = new Button("Datenbasis");
        btnDatenbasis.setCursor(new Cursor(Cursor.HAND_CURSOR));
        btnDatenbasis.setSize(100, 23);
        btnDatenbasis.setLocation(300, 200);
        this.add(btnDatenbasis);
        btnDatenbasis.addActionListener(this);
    }
 
 
    public void showDatenbasisFenster() {
 
        btnDatenbank();
        btnTextdatei();
        btnZurueckDatenbasis();
    }
 
 
    public void btnDatenbank() {
 
        btnDatenbank = new Button("Datenbank");
        btnDatenbank.setSize(100, 23);
        btnDatenbank.setLocation(210, 160);
        btnDatenbank.setFont(new Font("Arial", Font.BOLD, 12));
        this.add(btnDatenbank);
        btnDatenbank.addActionListener(this);    
    }
 
 
    public void btnTextdatei(){
  
        lblDatenbasis = new Label("Welche Datenbasis soll verwendet werden? ");
        lblDatenbasis.setFont(new Font("Arial", Font.LAYOUT_LEFT_TO_RIGHT, 14));
        lblDatenbasis.setForeground(Color.white);
        lblDatenbasis.setSize(300, 23);
        lblDatenbasis.setLocation(200, 130);
        this.add(lblDatenbasis);
 
 
        btnTextdatei = new Button("Textdatei");
        btnTextdatei.setSize(100, 23);
        btnTextdatei.setLocation(360, 160);
        btnTextdatei.setFont(new Font("Arial", Font.BOLD, 12));
        this.add(btnTextdatei);
        btnTextdatei.addActionListener(this);
    }
 
 
    private void btnBeenden()
    {
        btnBeenden = new Button("Server beenden");
        btnBeenden.setSize(120, 23);
        btnBeenden.setLocation(540, 235);
        Color col_beenden = new Color(254,32,42);
        btnBeenden.setBackground(col_beenden);
        btnBeenden.setFont(new Font("Arial", Font.BOLD, 12));
        this.add(btnBeenden);
        btnBeenden.addActionListener(this);
    }
 
 
    public void removeServerstartFenster() {
 
        btnServerStart.removeNotify();
        txtServerStartInfoAusgabe.removeNotify();
        btnKonfigAbsenden.removeNotify();
        lblPortEingabe.removeNotify();
        txtPortEingabe.removeNotify();
    }
 
 
    public void removeServerstoppFenster() {
 
        btnServerStopp.removeNotify();
        txtServerStoppInfoAusgabe.removeNotify();
        lblAktuellerPort.removeNotify();
    }
 
 
    public void removeHauptmenue() {
 
        btnServerFunktionen.removeNotify();
        btnDatenbasis.removeNotify();
        btnServerlog.removeNotify();
        btnBeenden.removeNotify();
    }
 
 
    public void removeAuswahlDatenbasis() {
 
        btnDatenbasis.removeNotify();
        lblDatenbasis.removeNotify();
        btnDatenbank.removeNotify();
        btnTextdatei.removeNotify();
        btnZurueckDatenbasis.removeNotify();
    }
 
 
 
    public void btnZurueckServerFunktionen() {
 
        btnZurueckServerFunktionen = new Button("Zurueck");
        btnZurueckServerFunktionen.setCursor(new Cursor(Cursor.HAND_CURSOR));
        btnZurueckServerFunktionen.setSize(100, 23);
        btnZurueckServerFunktionen.setLocation(40, 238);
        btnZurueckServerFunktionen.setFont(new Font("Arial", Font.BOLD, 12));
        this.add(btnZurueckServerFunktionen);
        btnZurueckServerFunktionen.addActionListener(this);
    }
 
    private void btnZurueckDatenbasis(){
 
        btnZurueckDatenbasis = new Button("Zurueck");
        btnZurueckDatenbasis.setCursor(new Cursor(Cursor.HAND_CURSOR));
        btnZurueckDatenbasis.setSize(100, 23);
        btnZurueckDatenbasis.setLocation(40, 238);
        btnZurueckDatenbasis.setFont(new Font("Arial", Font.BOLD, 12));
        this.add(btnZurueckDatenbasis);
        btnZurueckDatenbasis.addActionListener(this);
    }
 
 
    private void btnZurueckServerLog(){
 
        btnZurueckServerLog = new Button("Zurueck");
        btnZurueckServerLog.setCursor(new Cursor(Cursor.HAND_CURSOR));
        btnZurueckServerLog.setSize(100, 23);
        btnZurueckServerLog.setLocation(40, 340);
        btnZurueckServerLog.setFont(new Font("Arial", Font.BOLD, 12));
        this.add(btnZurueckServerLog);
        btnZurueckServerLog.addActionListener(this);
    }
 
 
    public void actionPerformed(ActionEvent ae)
    {
        Object o = ae.getSource();
 
        if(o instanceof Button) {
    
            /*if(ae.getActionCommand().equals("Absenden")) {
            eingabe = txtEingabe.getText();
            ausgabeLabel.setText(eingabe);
            }*/
            if(o.equals(btnKonfigAbsenden)) {
                try {
                    if(Integer.parseInt(txtPortEingabe.getText()) > 65535) {
                        lblAktuellerPort.setText("Portnummer zu lang!");
                        return;
                    }
                    s1.serverPort = Integer.parseInt(txtPortEingabe.getText());
                    lblAktuellerPort.setText("Aktueller Server Port: " +s1.serverPort);
                    btnServerStart.setBackground(Color.orange);
                    txtServerStartInfoAusgabe.setText("Server startbereit!");
                    txtServerStartInfoAusgabe.setBackground(Color.green);
                    txtPortEingabe.setBackground(Color.green);
                }
                catch(IllegalArgumentException e) {
            
                    lblAktuellerPort.setText("Port ungültig!");
                }
            }
            else if(o.equals(btnServerFunktionen)) {
 
                removeHauptmenue();
        
                if(serverStatus == 1) {
                    serverStopp();
                }
                else {
                    serverStart();
                }
                btnZurueckServerFunktionen();
        
            }
            else if(o.equals(btnServerStart)) {
        
                if(s1.serverPort == 0) {
                    txtServerStartInfoAusgabe.setText("Port zuerst eingeben!");
                    txtPortEingabe.setBackground(Color.red);
                    return;
                }
                            
                if(serverStatus == 0) {
        
                    s1 = new Server();
                    s1.start();
                    serverStatus = 1;            
                }
                else {
                    txtServerStartInfoAusgabe.setText("Server bereits gestartet!");
                    return;
                }
        
                removeServerstartFenster();
        
                serverStopp();
        
            }
            else if(o.equals(btnServerStopp)) {
                try {
        
                    s1.stoppen();
                    s1.interrupt();
                    lblmenueInfoUeberschrift2.setText("0");
                    txtServerStartInfoAusgabe.setText("");
                    serverStatus = 0;
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        
                removeServerstoppFenster();
        
                serverStart();
                btnServerStart.setBackground(Color.orange);
                txtServerStartInfoAusgabe.setText("Server gestoppt & bereit!");
                txtServerStartInfoAusgabe.setBackground(Color.orange);
            }
            else if(o.equals(btnZurueckServerFunktionen)) {
        
                btnZurueckServerFunktionen.removeNotify();
                lblAktuellerPort.removeNotify();
        
                if(serverStatus == 1) {
        
                    removeServerstoppFenster();            
                }
                else {            
            
                    removeServerstartFenster();                            
                }
        
                showHauptmenueFenster();
        
            }
            else if(o.equals(btnDatenbasis)) {
        
                removeHauptmenue();
        
                showDatenbasisFenster();
            }
            else if(o.equals(btnDatenbank)) {
        
            }
            else if(o.equals(btnTextdatei)) {
        
            }
            else if(o.equals(btnZurueckDatenbasis)) {
            
                removeAuswahlDatenbasis();
            
                showHauptmenueFenster();        
            }
            else if(o.equals(btnServerlog)) {
        
                this.setSize(700, 400);
        
                removeHauptmenue();
        
                btnZurueckServerLog();
        
                ServerLogFenster();
        
            }
            else if(o.equals(btnZurueckServerLog)) {
        
                btnZurueckServerLog.removeNotify();
                lblServerLog.removeNotify();
                txtServerLogAusgabefeld.removeNotify();
        
                this.setSize(700, 300);
        
                showHauptmenueFenster();
            }
            else if(o.equals(btnBeenden)) {
        
                MeinDialog dlg = new MeinDialog
                    (this, "Laden-Dialog", "Moechten Sie den Server beenden?");
                if(dlg.getAntwort()==true)
                {
                    //Wenn auf ja geklickt wurde, wird das Programm beendet.
                      System.exit(0);
                }
                else{
            
                }
            }    
        }
    }
    @Override
    public void itemStateChanged(ItemEvent arg0) {
        // TODO Auto-generated method stub
 
    }
 
    public void paint(Graphics g) {
 
        g.setColor(Color.LIGHT_GRAY);
        g.drawRect(this.getInsets().left + 20,
                this.getInsets().top + 20,
                (int)this.getSize().getWidth() - this.getInsets().left -
                this.getInsets().right - 40,
                (int)this.getSize().getHeight() - this.getInsets().top - this.getInsets().bottom - 40
                );
        //g.fillRect(20, 50, 655, 225);
        //g.fillRect(30, 55, 635, 215);
        //g.fillRect(110, 60, 450, 200);
        //g.fillRect(135, 90, 415, 140);
    }
}//End of Class
 
Zuletzt bearbeitet:

sliceX

Mitglied
Zeichenlimit eines Posts überschritten, deshalb hier noch ein zweiter Post.

ClientFenster Klasse
Java:
/*
 * Copyright (c) 2018
 * Client.Java
 * @author Jan Timmer
 * @version 1.7
 *
 */
package adreli_4_con;
import java.io.IOException;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class ClientFenster extends Frame implements ActionListener, ItemListener{
    Button btnPersonAufnehmen, btnPersonAbschicken, btnPersonAuflisten;
    Button btnPersonAufnahmeZurueck, btnPersonAusgabeZurueck;
    Button btnKonfigAbsenden, btnKonfigAendern;
    Button btnDateiNummerieren;
    Button btnRecordsSortieren;
    Button btnServerStatusAbfragen;
  
    TextField txtIpEingabe;
    TextField txtPortEingabe;
    Label lblKonfigFensterUeberschrift;
    Label lblIpEingabe;
    Label lblIpAusgabe;
    Label lblPortEingabe;
    Label lblPortAusgabe;
    Label lblPortHinweis;
    Label lblHauptmenueUeberschrift;
    Label lblMenueInfoUeberschrift;
    Label lblPersonAufnehmenUeberschrift;
    Label lblPersAusgabe_AnzahlPersonen;
    static Label lblMenueInfoUeberschrift2;
    static Label lblPersonAufnahme_InfoBox;
  
    //Label für Personenaufnahme und -anzeige
    Label lblPers_Name;
    Label lblPers_Vorname;
    Label lblPers_Anrede;
    Label lblPers_Strasse;
    Label lblPers_PLZ;
    Label lblPers_Ort;
    Label lblPers_Telefon;
    Label lblPers_Fax;
    Label lblPers_Bemerkung;
  
    //Label für Eingabefehlermeldungen im Personenaufnahmefenster
    static Label lblPers_NameAusgabe;
    static Label lblPers_VornameAusgabe;
    static Label lblPers_AnredeAusgabe;
    static Label lblPers_StrasseAusgabe;
    static Label lblPers_PLZAusgabe;
    static Label lblPers_OrtAusgabe;
    static Label lblPers_TelefonAusgabe;
    static Label lblPers_FaxAusgabe;
  
    //Eingabefelder für Aufnahme von Personen
    static TextField txtName;
    static TextField txtVorname;
    static TextField txtAnrede;
    static TextField txtStrasse;
    static TextField txtPLZ;
    static TextField txtOrt;
    static TextField txtTelefon;
    static TextField txtFax;
    static TextField txtBemerkung;  
  
    MenuBar mnuBar;
    Menu mnu;
    MenuItem mnuItem;
  
    List li;  
    String eingabe = null;
  
    static Client c1 = new Client();
  
  
    public static void main(String[] args) throws IOException {      
      
        ClientFenster fenster = new ClientFenster(0);          
    }
  
    public ClientFenster(int pBool){
          
            setTitle("Client-Assistent");
            this.setSize(700, 300);
            this.setLocation(600, 300);
            this.setLayout(null);
            this.setBackground(Color.DARK_GRAY);
          
            this.setVisible(true);
          
            this.addWindowListener(new WindowAdapter()
            {
            public void windowClosing(WindowEvent we)
            {
            System.exit(0);
            }
            });
          
            verbindungHerstellenFenster();          
    }
  
  
    public void verbindungHerstellenFenster() {  
      
            lblKonfigFensterUeberschrift = new Label();
            lblKonfigFensterUeberschrift.setSize(210,23);
            lblKonfigFensterUeberschrift.setLocation(60, 40);
            lblKonfigFensterUeberschrift.setFont(new Font("Times New Roman", Font.PLAIN, 22));
            lblKonfigFensterUeberschrift.setText("Verbindung herstellen");
            lblKonfigFensterUeberschrift.setBackground(Color.DARK_GRAY);
            lblKonfigFensterUeberschrift.setForeground(Color.white);
            this.add(lblKonfigFensterUeberschrift);
          
            btnKonfigAbsenden = new Button("Absenden");
            btnKonfigAbsenden.setCursor(new Cursor(Cursor.HAND_CURSOR));
            btnKonfigAbsenden.setBounds(540, 225, 100, 23);
            this.add(btnKonfigAbsenden);
            btnKonfigAbsenden.addActionListener(this);
          
            lblIpEingabe = new Label("IP-Adresse eingeben:", Label.CENTER);
            lblIpEingabe.setSize(140,23);
            lblIpEingabe.setLocation(145,120);
            lblIpEingabe.setBackground(Color.LIGHT_GRAY);
            this.add(lblIpEingabe);
          
            lblIpAusgabe = new Label("", Label.CENTER);
            lblIpAusgabe.setSize(165,23);
            lblIpAusgabe.setLocation(415,120);
            lblIpAusgabe.setBackground(Color.DARK_GRAY);
            lblIpAusgabe.setForeground(Color.white);
            this.add(lblIpAusgabe);
          
            txtIpEingabe = new TextField("127.0.0.1");
            txtIpEingabe.setSize(100, 23);
            txtIpEingabe.setLocation(300, 120);
            add(txtIpEingabe);
          
            lblPortEingabe = new Label("Port eingeben:", Label.CENTER);
            lblPortEingabe.setSize(140,23);
            lblPortEingabe.setLocation(145,150);
            lblPortEingabe.setBackground(Color.LIGHT_GRAY);
            this.add(lblPortEingabe);
          
            lblPortAusgabe = new Label("", Label.CENTER);
            lblPortAusgabe.setSize(160,23);
            lblPortAusgabe.setLocation(415,150);
            lblPortAusgabe.setBackground(Color.DARK_GRAY);
            lblPortAusgabe.setForeground(Color.white);
            this.add(lblPortAusgabe);
          
            txtPortEingabe = new TextField("56789");
            txtPortEingabe.setSize(100, 23);
            txtPortEingabe.setLocation(300, 150);
            add(txtPortEingabe);
  
            lblPortHinweis = new Label("(Standard-Port: 56789)");
            lblPortHinweis.setSize(140,23);
            lblPortHinweis.setLocation(285,180);
            lblPortHinweis.setBackground(Color.DARK_GRAY);
            lblPortHinweis.setForeground(Color.white);
            this.add(lblPortHinweis);
            this.setVisible(true);
    }//End of verbindungHerstellenFenster()
      
  
      
    public void menueAuswahlFenster(){ //Fenster für Menüauswahl
          
        mnuBar = new MenuBar();
        this.setMenuBar(mnuBar);
        mnu = new Menu("Datei");
        mnuBar.add(mnu);
          
        mnuItem = new MenuItem("Öffnen", new MenuShortcut(KeyEvent.VK_O));
        mnuItem.addActionListener(this);
        mnu.add(mnuItem);
          
        mnuItem = new MenuItem("Datensätze Speichern", new MenuShortcut(KeyEvent.VK_S));
        mnuItem.addActionListener(this);
        mnu.add(mnuItem);
          
        mnu.addSeparator();
        mnuItem = new MenuItem("Beenden");
        mnuItem.addActionListener(this);
        mnu.add(mnuItem);
        mnu = new Menu("Info"); //---------- zweites Menue -------------------
        mnuBar.add(mnu);
        mnuItem = new MenuItem("Info", new MenuShortcut(KeyEvent.VK_I));
        mnuItem.addActionListener(this);
        mnu.add(mnuItem);
              
        lblHauptmenueUeberschrift = new Label();
        lblHauptmenueUeberschrift.setSize(140,23);
        lblHauptmenueUeberschrift.setLocation(60, 60);
        lblHauptmenueUeberschrift.setFont(new Font("Times New Roman", Font.PLAIN, 22));
        lblHauptmenueUeberschrift.setText("Möchten sie...");
        lblHauptmenueUeberschrift.setBackground(Color.DARK_GRAY);
        lblHauptmenueUeberschrift.setForeground(Color.white);
        this.add(lblHauptmenueUeberschrift);
              
        btnPersonAufnehmen = new Button("Person Aufnehmen");
        btnPersonAufnehmen.setCursor(new Cursor(Cursor.HAND_CURSOR));
        btnPersonAufnehmen.setBounds(240, 90, 120, 23);
        this.add(btnPersonAufnehmen);
        btnPersonAufnehmen.addActionListener(this);
      
        btnPersonAuflisten = new Button("Personen Auflisten");
        btnPersonAuflisten.setCursor(new Cursor(Cursor.HAND_CURSOR));
        btnPersonAuflisten.setBounds(240, 130, 120, 23);
        this.add(btnPersonAuflisten);
        btnPersonAuflisten.addActionListener(this);
      
        btnDateiNummerieren = new Button("Datei Nummerieren");
        btnDateiNummerieren.setCursor(new Cursor(Cursor.HAND_CURSOR));
        btnDateiNummerieren.setBounds(240,170, 120, 23);
        this.add(btnDateiNummerieren);
        btnDateiNummerieren.addActionListener(this);
      
        btnRecordsSortieren = new Button("Records sortieren");
        btnRecordsSortieren.setCursor(new Cursor(Cursor.HAND_CURSOR));
        btnRecordsSortieren.setBounds(240,210, 120, 23);
        this.add(btnRecordsSortieren);
        btnRecordsSortieren.addActionListener(this);
      
        lblMenueInfoUeberschrift = new Label("Informationen");
        lblMenueInfoUeberschrift.setSize(240, 23);
        lblMenueInfoUeberschrift.setLocation(420, 90);
        lblMenueInfoUeberschrift.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        lblMenueInfoUeberschrift.setBackground(Color.GRAY);
        lblMenueInfoUeberschrift.setForeground(Color.white);
        this.add(lblMenueInfoUeberschrift);
      
        lblMenueInfoUeberschrift2 = new Label();
        lblMenueInfoUeberschrift2.setSize(240, 50);
        lblMenueInfoUeberschrift2.setLocation(420, 110);
        lblMenueInfoUeberschrift2.setFont(new Font("Times New Roman", Font.PLAIN, 14));
        lblMenueInfoUeberschrift2.setBackground(Color.LIGHT_GRAY);
        lblMenueInfoUeberschrift2.setForeground(Color.black);
        this.add(lblMenueInfoUeberschrift2);
      
        btnServerStatusAbfragen = new Button("Serverstatus aktualisieren");
        btnServerStatusAbfragen.setCursor(new Cursor(Cursor.HAND_CURSOR));
        btnServerStatusAbfragen.setBounds(420, 175, 150, 23);
        this.add(btnServerStatusAbfragen);
        btnServerStatusAbfragen.addActionListener(this);
      
        btnKonfigAendern = new Button("Abmelden");
        btnKonfigAendern.setCursor(new Cursor(Cursor.HAND_CURSOR));
        btnKonfigAendern.setBounds(420, 210, 120, 23);
        this.add(btnKonfigAendern);
        btnKonfigAendern.addActionListener(this);
      
    }//End of menueAuswahlFenster()
  
  
    public void personenAufnahmeFenster(){ //Fenster für Personenaufnahme
      
        lblPersonAufnehmenUeberschrift = new Label();
        lblPersonAufnehmenUeberschrift.setSize(185,23);
        lblPersonAufnehmenUeberschrift.setLocation(60, 40);
        lblPersonAufnehmenUeberschrift.setFont(new Font("Times New Roman", Font.PLAIN, 22));
        lblPersonAufnehmenUeberschrift.setText("Person aufnehmen");
        lblPersonAufnehmenUeberschrift.setBackground(Color.DARK_GRAY);
        lblPersonAufnehmenUeberschrift.setForeground(Color.white);
        this.add(lblPersonAufnehmenUeberschrift);
      
        //Name
        lblPers_Name = new Label("Name eingeben:", Label.CENTER);
        lblPers_Name.setSize(140,23);
        lblPers_Name.setLocation(145,90);
        lblPers_Name.setBackground(Color.LIGHT_GRAY);
        this.add(lblPers_Name);
      
        lblPers_NameAusgabe = new Label("", Label.CENTER);
        lblPers_NameAusgabe.setSize(240,23);
        lblPers_NameAusgabe.setLocation(415,90);
        lblPers_NameAusgabe.setBackground(Color.DARK_GRAY);
        lblPers_NameAusgabe.setForeground(Color.white);
        this.add(lblPers_NameAusgabe);
      
        txtName = new TextField("Mustermann");
        txtName.setSize(110, 23);
        txtName.setLocation(300, 90);
        add(txtName);
      
        //Vorname
        lblPers_Vorname = new Label("Vorname eingeben:", Label.CENTER);
        lblPers_Vorname.setSize(140,23);
        lblPers_Vorname.setLocation(145,120);
        lblPers_Vorname.setBackground(Color.LIGHT_GRAY);
        this.add( lblPers_Vorname);
      
        lblPers_VornameAusgabe = new Label("", Label.CENTER);
        lblPers_VornameAusgabe.setSize(240,23);
        lblPers_VornameAusgabe.setLocation(415,120);
        lblPers_VornameAusgabe.setBackground(Color.DARK_GRAY);
        lblPers_VornameAusgabe.setForeground(Color.white);
        this.add( lblPers_VornameAusgabe);
      
        txtVorname = new TextField("Max");
        txtVorname.setSize(110, 23);
        txtVorname.setLocation(300, 120);
        add( txtVorname);
      
        //Anrede
        lblPers_Anrede = new Label("Anrede eingeben:", Label.CENTER);
        lblPers_Anrede.setSize(140,23);
        lblPers_Anrede.setLocation(145,150);
        lblPers_Anrede.setBackground(Color.LIGHT_GRAY);
        this.add(lblPers_Anrede);
      
        lblPers_AnredeAusgabe = new Label("", Label.CENTER);
        lblPers_AnredeAusgabe.setSize(240,23);
        lblPers_AnredeAusgabe.setLocation(415,150);
        lblPers_AnredeAusgabe.setBackground(Color.DARK_GRAY);
        lblPers_AnredeAusgabe.setForeground(Color.white);
        this.add(lblPers_AnredeAusgabe);
      
        txtAnrede = new TextField("Herr");
        txtAnrede.setSize(110, 23);
        txtAnrede.setLocation(300, 150);
        add(txtAnrede);
      
        //Strasse
        lblPers_Strasse = new Label("Strasse eingeben:", Label.CENTER);
        lblPers_Strasse.setSize(140,23);
        lblPers_Strasse.setLocation(145,180);
        lblPers_Strasse.setBackground(Color.LIGHT_GRAY);
        this.add(lblPers_Strasse);
      
        lblPers_StrasseAusgabe = new Label("", Label.CENTER);
        lblPers_StrasseAusgabe.setSize(240,23);
        lblPers_StrasseAusgabe.setLocation(415,180);
        lblPers_StrasseAusgabe.setBackground(Color.DARK_GRAY);
        lblPers_StrasseAusgabe.setForeground(Color.white);
        this.add(lblPers_StrasseAusgabe);
      
        txtStrasse = new TextField("Musterstrasse 12");
        txtStrasse.setSize(110, 23);
        txtStrasse.setLocation(300, 180);
        add(txtStrasse);
      
        //PLZ
        lblPers_PLZ = new Label("PLZ eingeben:", Label.CENTER);
        lblPers_PLZ.setSize(140,23);
        lblPers_PLZ.setLocation(145,210);
        lblPers_PLZ.setBackground(Color.LIGHT_GRAY);
        this.add(lblPers_PLZ);
      
        lblPers_PLZAusgabe = new Label("", Label.CENTER);
        lblPers_PLZAusgabe.setSize(240,23);
        lblPers_PLZAusgabe.setLocation(415,210);
        lblPers_PLZAusgabe.setBackground(Color.DARK_GRAY);
        lblPers_PLZAusgabe.setForeground(Color.white);
        this.add(lblPers_PLZAusgabe);
      
        txtPLZ = new TextField("78120");
        txtPLZ.setSize(110, 23);
        txtPLZ.setLocation(300, 210);
        add(txtPLZ);
      
        //Ort
        lblPers_Ort = new Label("Ort eingeben:", Label.CENTER);
        lblPers_Ort.setSize(140,23);
        lblPers_Ort.setLocation(145,240);
        lblPers_Ort.setBackground(Color.LIGHT_GRAY);
        this.add(lblPers_Ort);
      
        lblPers_OrtAusgabe = new Label("", Label.CENTER);
        lblPers_OrtAusgabe.setSize(240,23);
        lblPers_OrtAusgabe.setLocation(415,240);
        lblPers_OrtAusgabe.setBackground(Color.DARK_GRAY);
        lblPers_OrtAusgabe.setForeground(Color.white);
        this.add(lblPers_OrtAusgabe);
      
        txtOrt = new TextField("Furtwangen");
        txtOrt.setSize(110, 23);
        txtOrt.setLocation(300, 240);
        add(txtOrt);
      
        //Telefon
        lblPers_Telefon = new Label("Telefon eingeben:", Label.CENTER);
        lblPers_Telefon.setSize(140,23);
        lblPers_Telefon.setLocation(145,270);
        lblPers_Telefon.setBackground(Color.LIGHT_GRAY);
        this.add(lblPers_Telefon);
      
        lblPers_TelefonAusgabe = new Label("", Label.CENTER);
        lblPers_TelefonAusgabe.setSize(240,23);
        lblPers_TelefonAusgabe.setLocation(415,270);
        lblPers_TelefonAusgabe.setBackground(Color.DARK_GRAY);
        lblPers_TelefonAusgabe.setForeground(Color.white);
        this.add(lblPers_TelefonAusgabe);
      
        txtTelefon = new TextField("123");
        txtTelefon.setSize(110, 23);
        txtTelefon.setLocation(300, 270);
        add(txtTelefon);
      
        //Fax
        lblPers_Fax = new Label("Fax eingeben:", Label.CENTER);
        lblPers_Fax.setSize(140,23);
        lblPers_Fax.setLocation(145,300);
        lblPers_Fax.setBackground(Color.LIGHT_GRAY);
        this.add(lblPers_Fax);
      
        lblPers_FaxAusgabe = new Label("", Label.CENTER);
        lblPers_FaxAusgabe.setSize(240,23);
        lblPers_FaxAusgabe.setLocation(415,300);
        lblPers_FaxAusgabe.setBackground(Color.DARK_GRAY);
        lblPers_FaxAusgabe.setForeground(Color.white);
        this.add(lblPers_FaxAusgabe);
      
        txtFax = new TextField("123");
        txtFax.setSize(110, 23);
        txtFax.setLocation(300, 300);
        add(txtFax);
      
        //Bemerkung
        lblPers_Bemerkung = new Label("Bemerkung eingeben:", Label.CENTER);
        lblPers_Bemerkung.setSize(140,23);
        lblPers_Bemerkung.setLocation(145,330);
        lblPers_Bemerkung.setBackground(Color.LIGHT_GRAY);
        this.add(lblPers_Bemerkung);
      
        txtBemerkung = new TextField("-keine-");
        txtBemerkung.setSize(110, 23);
        txtBemerkung.setLocation(300, 330);
        add(txtBemerkung);
      
        //Person in Array aufnehmen
        btnPersonAbschicken = new Button("Absenden");
        btnPersonAbschicken.setCursor(new Cursor(Cursor.HAND_CURSOR));
        btnPersonAbschicken.setBounds(565, 392, 100, 23);
        this.add(btnPersonAbschicken);
        btnPersonAbschicken.addActionListener(this);
      
        //Zurück zum Hauptmenü
        btnPersonAufnahmeZurueck = new Button("Zurück");
        btnPersonAufnahmeZurueck.setCursor(new Cursor(Cursor.HAND_CURSOR));
        btnPersonAufnahmeZurueck.setBounds(35, 392, 100, 23);
        this.add(btnPersonAufnahmeZurueck);
        btnPersonAufnahmeZurueck.addActionListener(this);
      
        //Infoausgabe
      
        lblPersonAufnahme_InfoBox = new Label("Info-Box", Label.CENTER);
        lblPersonAufnahme_InfoBox.setSize(380,23);
        lblPersonAufnahme_InfoBox.setLocation(145,360);
        lblPersonAufnahme_InfoBox.setBackground(Color.LIGHT_GRAY);
        lblPersonAufnahme_InfoBox.setForeground(Color.black);
        this.add( lblPersonAufnahme_InfoBox);
        this.setVisible(true);
    }//End of personenAufnahmeFenster()
  
  
    public void personenAnzeigeFenster(){ //Fenster für Personenanzeige
      
        lblPersonAufnehmenUeberschrift = new Label();
        lblPersonAufnehmenUeberschrift.setSize(190,23);
        lblPersonAufnehmenUeberschrift.setLocation(60, 40);
        lblPersonAufnehmenUeberschrift.setFont(new Font("Times New Roman", Font.PLAIN, 22));
        lblPersonAufnehmenUeberschrift.setText("Personen anzeigen");
        lblPersonAufnehmenUeberschrift.setBackground(Color.DARK_GRAY);
        lblPersonAufnehmenUeberschrift.setForeground(Color.white);
        this.add(lblPersonAufnehmenUeberschrift);
      
        //Name
        lblPers_Name = new Label("Name:", Label.CENTER);
        lblPers_Name.setSize(140,23);
        lblPers_Name.setLocation(145,90);
        lblPers_Name.setBackground(Color.LIGHT_GRAY);
        this.add(lblPers_Name);
      
        txtName = new TextField("");
        txtName.setSize(120, 23);
        txtName.setLocation(300, 90);
        txtName.setEditable(false);
        add(txtName);
      
        //Vorname
        lblPers_Vorname = new Label("Vorname:", Label.CENTER);
        lblPers_Vorname.setSize(140,23);
        lblPers_Vorname.setLocation(145,120);
        lblPers_Vorname.setBackground(Color.LIGHT_GRAY);
        this.add( lblPers_Vorname);
      
        txtVorname = new TextField("");
        txtVorname.setSize(120, 23);
        txtVorname.setLocation(300, 120);
        txtVorname.setEditable(false);
        add( txtVorname);
      
        //Anrede
        lblPers_Anrede = new Label("Anrede:", Label.CENTER);
        lblPers_Anrede.setSize(140,23);
        lblPers_Anrede.setLocation(145,150);
        lblPers_Anrede.setBackground(Color.LIGHT_GRAY);
        this.add(lblPers_Anrede);
      
        txtAnrede = new TextField("");
        txtAnrede.setSize(120, 23);
        txtAnrede.setLocation(300, 150);
        txtAnrede.setEditable(false);
        add(txtAnrede);
      
        //Strasse
        lblPers_Strasse = new Label("Strasse:", Label.CENTER);
        lblPers_Strasse.setSize(140,23);
        lblPers_Strasse.setLocation(145,180);
        lblPers_Strasse.setBackground(Color.LIGHT_GRAY);
        this.add(lblPers_Strasse);
        txtStrasse = new TextField("");
        txtStrasse.setSize(120, 23);
        txtStrasse.setLocation(300, 180);
        txtStrasse.setEditable(false);
        add(txtStrasse);
      
        //PLZ
        lblPers_PLZ = new Label("PLZ:", Label.CENTER);
        lblPers_PLZ.setSize(140,23);
        lblPers_PLZ.setLocation(145,210);
        lblPers_PLZ.setBackground(Color.LIGHT_GRAY);
        this.add(lblPers_PLZ);
        txtPLZ = new TextField("");
        txtPLZ.setSize(120, 23);
        txtPLZ.setLocation(300, 210);
        txtPLZ.setEditable(false);
        add(txtPLZ);
      
        //Ort
        lblPers_Ort = new Label("Ort:", Label.CENTER);
        lblPers_Ort.setSize(140,23);
        lblPers_Ort.setLocation(145,240);
        lblPers_Ort.setBackground(Color.LIGHT_GRAY);
        this.add(lblPers_Ort);
        txtOrt = new TextField("");
        txtOrt.setSize(120, 23);
        txtOrt.setLocation(300, 240);
        txtOrt.setEditable(false);
        add(txtOrt);
      
        //Telefon
        lblPers_Telefon = new Label("Telefon:", Label.CENTER);
        lblPers_Telefon.setSize(140,23);
        lblPers_Telefon.setLocation(145,270);
        lblPers_Telefon.setBackground(Color.LIGHT_GRAY);
        this.add(lblPers_Telefon);
        txtTelefon = new TextField("");
        txtTelefon.setSize(120, 23);
        txtTelefon.setLocation(300, 270);
        txtTelefon.setEditable(false);
        add(txtTelefon);
      
        //Fax
        lblPers_Fax = new Label("Fax:", Label.CENTER);
        lblPers_Fax.setSize(140,23);
        lblPers_Fax.setLocation(145,300);
        lblPers_Fax.setBackground(Color.LIGHT_GRAY);
        this.add(lblPers_Fax);
        txtFax = new TextField("");
        txtFax.setSize(120, 23);
        txtFax.setLocation(300, 300);
        txtFax.setEditable(false);
        add(txtFax);
      
        //Bemerkung
        lblPers_Bemerkung = new Label("Bemerkung:", Label.CENTER);
        lblPers_Bemerkung.setSize(140,23);
        lblPers_Bemerkung.setLocation(145,330);
        lblPers_Bemerkung.setBackground(Color.LIGHT_GRAY);
        this.add(lblPers_Bemerkung);
      
        txtBemerkung = new TextField("");
        txtBemerkung.setSize(120, 23);
        txtBemerkung.setLocation(300, 330);
        txtBemerkung.setEditable(false);
        add(txtBemerkung);
      
        //Liste der vorhandenen Personen
        li = new List();
        li.setSize(140, 140);
        li.setLocation(500, 113);
        li.addItemListener(this);
        li.addActionListener(this);
      
        for (Person e: Client.myPersonObjects) {
        li.add(e.getName());
        }
        //li.add(Client.myPersonObjects.get(0).getName());
        add(li);
      
        lblPersAusgabe_AnzahlPersonen = new Label("Personen: " +Client.persCounter, Label.CENTER);
        lblPersAusgabe_AnzahlPersonen.setSize(140,23);
        lblPersAusgabe_AnzahlPersonen.setLocation(500,90);
        lblPersAusgabe_AnzahlPersonen.setBackground(Color.LIGHT_GRAY);
        this.add( lblPersAusgabe_AnzahlPersonen);
    
      
        //Zurück zum Hauptmenü
        btnPersonAusgabeZurueck = new Button("Zurück");
        btnPersonAusgabeZurueck.setCursor(new Cursor(Cursor.HAND_CURSOR));
        btnPersonAusgabeZurueck.setBounds(35, 372, 100, 23);
        this.add(btnPersonAusgabeZurueck);
        btnPersonAusgabeZurueck.addActionListener(this);
  
    }//End of personenAnzeigeFenster()
  
  
    public void removeVerbindungHerstellenFenster() {
      
        lblKonfigFensterUeberschrift.removeNotify();
        btnKonfigAbsenden.removeNotify();
        lblIpEingabe.removeNotify();
        lblIpAusgabe.removeNotify();
        txtIpEingabe.removeNotify();
        lblPortEingabe.removeNotify();
        lblPortAusgabe.removeNotify();
        txtPortEingabe.removeNotify();
        lblPortHinweis.removeNotify();
    }
      
  
    public void removeMenueAuswahlFenster(){
          
        mnu.removeNotify();
        mnuItem.removeNotify();
        mnuBar.removeNotify();
          
        lblHauptmenueUeberschrift.removeNotify();
        btnPersonAufnehmen.removeNotify();
        btnPersonAuflisten.removeNotify();
        btnDateiNummerieren.removeNotify();
        btnRecordsSortieren.removeNotify();
        lblMenueInfoUeberschrift.removeNotify();
        lblMenueInfoUeberschrift2.removeNotify();
        btnServerStatusAbfragen.removeNotify();
        btnKonfigAendern.removeNotify();          
    }      
      
    public void removePersonenAufnahmeFenster(){
      
        lblPersonAufnehmenUeberschrift.removeNotify();
        lblPers_Name.removeNotify();
        lblPers_NameAusgabe.removeNotify();
        txtName.removeNotify();
        lblPers_Vorname.removeNotify();
        lblPers_VornameAusgabe.removeNotify();
        txtVorname.removeNotify();
        lblPers_Anrede.removeNotify();
        lblPers_AnredeAusgabe.removeNotify();
        txtAnrede.removeNotify();
        lblPers_Strasse.removeNotify();
        lblPers_StrasseAusgabe.removeNotify();
        txtStrasse.removeNotify();
        lblPers_PLZ.removeNotify();
        lblPers_PLZAusgabe.removeNotify();
        txtPLZ.removeNotify();
        lblPers_Ort.removeNotify();
        lblPers_OrtAusgabe.removeNotify();
        txtOrt.removeNotify();
        lblPers_Telefon.removeNotify();
        lblPers_TelefonAusgabe.removeNotify();
        txtTelefon.removeNotify();
        lblPers_Fax.removeNotify();
        lblPers_FaxAusgabe.removeNotify();
        txtFax.removeNotify();
        lblPers_Bemerkung.removeNotify();
        txtBemerkung.removeNotify();
        btnPersonAbschicken.removeNotify();
        btnPersonAufnahmeZurueck.removeNotify();
        lblPersonAufnahme_InfoBox.removeNotify();
      
    }//End of removePersonenAufnahmeFenster()
  
      
    public void removePersonenAnzeigeFenster(){
          
        this.removeAll();
    }  
  
  
    public void actionPerformed(ActionEvent ae)
    {
        Object o = ae.getSource();
      
        if(o instanceof Button) {
          
            /*if(ae.getActionCommand().equals("Absenden")) {
            eingabe = txtEingabe.getText();
            ausgabeLabel.setText(eingabe);
            }*/
          
            if(o.equals(btnKonfigAbsenden)) {
                Client.ip = txtIpEingabe.getText();
                Client.port = Integer.parseInt(txtPortEingabe.getText());
                lblIpAusgabe.setText("IP wurde auf " +Client.ip +" gesetzt!");
                lblPortAusgabe.setText("Port wurde auf " +Client.port +" gesetzt!");
                removeVerbindungHerstellenFenster();
                menueAuswahlFenster();
                try {
                    c1.starten();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            else if(o.equals(btnKonfigAendern)) {
                                              
                removeMenueAuswahlFenster();              
                verbindungHerstellenFenster();
            }
            else if(o.equals(btnPersonAufnehmen)) {
              
                removeMenueAuswahlFenster();
                this.setSize(700, 450);
                personenAufnahmeFenster();              
            }
            else if(o.equals(btnPersonAbschicken)) {
              
                MeinDialog dlg = new MeinDialog(this, "Person aufnehmen",
                        "Eingaben korrekt?");
                        if(dlg.getAntwort() == true) {
              
                lblPers_NameAusgabe.setText("");
                lblPers_VornameAusgabe.setText("");
                lblPers_AnredeAusgabe.setText("");
                lblPers_StrasseAusgabe.setText("");
                lblPers_PLZAusgabe.setText("");
                lblPers_OrtAusgabe.setText("");
                lblPers_TelefonAusgabe.setText("");
          
                c1.menueAuswahl(1);
                }
                else {
                    return;
                }              
            }
            else if(o.equals(btnPersonAufnahmeZurueck)) {
              
                removePersonenAufnahmeFenster();
                this.setSize(700, 300);
                menueAuswahlFenster();
            }
            else if(o.equals(btnPersonAuflisten)) {  
              
                removeMenueAuswahlFenster();
                this.setSize(700, 430);
                personenAnzeigeFenster();
            }
            else if(o.equals(btnPersonAusgabeZurueck)) {  
              
                removePersonenAnzeigeFenster();
                this.setSize(700, 300);
                menueAuswahlFenster();
            }
            else if(o.equals(btnDateiNummerieren)) {
              
                c1.menueAuswahl(5);
            }
            else if(o.equals(btnRecordsSortieren)) {
              
                c1.menueAuswahl(6);          
            }
            else if(o.equals(btnServerStatusAbfragen)) {
              
                c1.menueAuswahl(8);
              
                if(c1.serverStatus == 0) {
                  
                    lblMenueInfoUeberschrift2.setText("Server nicht aktiv!");
                }
                else if(c1.serverStatus == 1) {
                  
                    lblMenueInfoUeberschrift2.setText("Server aktiv!");
                }
                else if(c1.serverStatus == 2) {
                  
                    lblMenueInfoUeberschrift2.setText("Server has been killed!");
                }              
            }      
        }
      
        else if(o instanceof MenuItem) {
            if(((MenuItem)o).getLabel().equals("Öffnen"))
          
            {
                FileDialog dlg = new FileDialog(this, "Datei öffnen", FileDialog.LOAD);
                dlg.setVisible(true);
                c1.directory = dlg.getDirectory();
                c1.fileName = dlg.getFile();
                c1.menueAuswahl(4);
            }
            else if(((MenuItem)o).getLabel().equals("Datensätze Speichern"))
            {
                FileDialog dlg = new FileDialog(this, "Datei speichern unter", FileDialog.SAVE);
                dlg.show();
                c1.directory = dlg.getDirectory();
                c1.fileName = dlg.getFile();
                c1.menueAuswahl(3);
              
            }
            else if(((MenuItem)o).getLabel().equals("Beenden"))
            {
                MeinDialog dlg = new MeinDialog(this, "Anwendung beenden",
                "Wollen Sie die Anwendung wirklich beenden?");
                if(dlg.getAntwort() == true) {
                    try {
                        c1.clientSocket.close();
                        System.exit(0);
                    } catch (NullPointerException e) {
                        // TODO Auto-generated catch block
                        System.exit(0);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                else {
                }
              
            }
            else if(((MenuItem)o).getLabel().equals("Info"))
            {
                MeinDialog dlg = new MeinDialog(this, "Info",
                "@author: J. Timmer, S. Pritzkat, C. Herbst");
            }
        }
    }//End of actionPerformed
  
    @Override
    public void itemStateChanged(ItemEvent ie) {
      
        Object object = ie.getSource();
        if (object.equals(li))
        {      
            for (Person e: Client.myPersonObjects) {
              
                if(li.getSelectedItem() == e.getName()) {
                  
                    txtName.setText(e.getName());
                    txtVorname.setText(e.getVorname());
                    txtAnrede.setText(e.getAnrede());
                    txtStrasse.setText(e.getStrasse());
                    txtPLZ.setText(e.getPlz());
                    txtOrt.setText(e.getOrt());
                    txtTelefon.setText(e.getTelefon());
                    txtFax.setText(e.getFax());
                    txtBemerkung.setText(e.getBemerkung());                  
                }
            }      
        }      
    }
  
  
    public void paint(Graphics g) {      
      
        g.setColor(Color.LIGHT_GRAY);
        g.drawRect(this.getInsets().left + 20,
            this.getInsets().top + 20,
            (int)this.getSize().getWidth() - this.getInsets().left -
            this.getInsets().right - 40,
            (int)this.getSize().getHeight() - this.getInsets().top - this.getInsets().bottom - 40
            );  
    }
}//End of Class

Dialog Klasse (Hilfsklasse für Fenster Pop-Ups)
Java:
package adreli_4_con;
import java.awt.*;
import java.awt.event.*;
public class MeinDialog extends Dialog implements ActionListener
{
Button btnOK, btnAbbrechen;
private boolean antwort = false;
public MeinDialog(Frame owner, String titel, String mldg)
{
super(owner, titel, true);
this.setSize(300, 130);
this.setLocation(600, 300);
this.setResizable(false);
this.setLayout(null);
Label lblMldg = new Label(mldg);
lblMldg.setSize(260, 25);
lblMldg.setLocation(20, 40);
add(lblMldg);
btnOK = new Button("OK");
btnOK.setSize(70, 25);
btnOK.setLocation(70, 80);
this.add(btnOK);
btnOK.addActionListener(this);
btnAbbrechen = new Button("Abbrechen");
btnAbbrechen.setSize(70, 25);
btnAbbrechen.setLocation(160, 80);
this.add(btnAbbrechen);
btnAbbrechen.addActionListener(this);
this.setVisible(true);
}
public void actionPerformed(ActionEvent ae)
{
Object object = ae.getSource();
if(object.equals(btnOK))
antwort = true;
setVisible(false);
dispose();
}
public boolean getAntwort()
{
return antwort;
}
}
 

mihe7

Top Contributor
Hallo sliceX,
mal ein paar Hinweise:
  1. das kann IMO schon nicht funktionieren, weil ServerThread.clientSocket eine Klassenvariable ist, die beim Erzeugen eines ServerThread-Objekts gesetzt wird.
  2. Abgesehen davon findet keinerlei Thread-Synchronisation statt.
  3. Die threadList wird auch nicht gefüllt. Im stoppen() wird auf ServerThread.clientSocket zugegriffen, auch nicht schön, das kann der ServerThread selbst machen.
Sollte erst mal reichen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
C Was ist nötig für ein Java-Programm auf Server für Website Java Basics - Anfänger-Themen 18
R Server/Client für Spiel Java Basics - Anfänger-Themen 2
I Interface Comparable für Server-Item-Interface Java Basics - Anfänger-Themen 12
V pfad.exists() gilt nicht für "//server/a/xyz.jpg"? Java Basics - Anfänger-Themen 12
M Problem: JSP für Zugriff auf Oracle-Server/Datenbank - sinnvoll? Java Basics - Anfänger-Themen 35
zilti Keine Leseberechtigung für Datei auf dem Server Java Basics - Anfänger-Themen 4
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
K Verständnisproblem bei Server/Client Java Basics - Anfänger-Themen 3
A Server - Client Nachrichtenaustausch über Eventbus Java Basics - Anfänger-Themen 12
FireHorses Benutzernamen aus PrivateChannel(Interaction) auf Server bringen Java Basics - Anfänger-Themen 0
HolyFUT Best Practice Architektur WebSocket Server Java Basics - Anfänger-Themen 1
S Server Java Basics - Anfänger-Themen 4
S Server Java Basics - Anfänger-Themen 3
D Verbesserungsvorschläge zur Struktur einer Client Server Desktop Chat App Java Basics - Anfänger-Themen 24
D Unerwartetes Verhalten bei Client Server Chat App Java Basics - Anfänger-Themen 12
M CS GO Server mit Java steuern Java Basics - Anfänger-Themen 3
K Verständnisfrage Server/Client BufferedReader, PrintWriter Java Basics - Anfänger-Themen 2
B DHCP-Server Adresse ermitteln Java Basics - Anfänger-Themen 4
A Client-Server Kommunikation Java Basics - Anfänger-Themen 3
F Mehrere Server Sockets in einer Anwendung Java Basics - Anfänger-Themen 9
R Antwort vom Server an mehreren Clients senden Java Basics - Anfänger-Themen 3
W Netwerkprogrammierung und Http Server Java Basics - Anfänger-Themen 10
G sql server connection mit windows authentication Java Basics - Anfänger-Themen 2
N Erste Schritte Dedicated Server \ Senden und Empfangen von Daten/Befehlen Java Basics - Anfänger-Themen 2
L Erste Schritte Erste Versuche mit Server und Client Java Basics - Anfänger-Themen 7
elischa Client-Server IO und Stream Steuerung ? Java Basics - Anfänger-Themen 2
U Erste Schritte Server will nicht übergebenes Objekt speichern Java Basics - Anfänger-Themen 5
B IP Adresse von Wildfly Server Java Basics - Anfänger-Themen 1
cezary Server läßt sich nicht starten Java Basics - Anfänger-Themen 2
J Java Server Pages - Verständnisfrage Java Basics - Anfänger-Themen 2
I Print Client -> Server -> Client? Java Basics - Anfänger-Themen 1
I lokales Programm mit Client/Server Programm kommunizieren Java Basics - Anfänger-Themen 3
H java.lang.NoClassDefFoundError Run as>> Run on Server Java Basics - Anfänger-Themen 2
F String zu einem Server senden Java Basics - Anfänger-Themen 4
N Server Zeit zur lokalen Zeit setzen. Java Basics - Anfänger-Themen 0
J TCP MultiThreaded Server und Client - irgendwo ist der Fehler, aber ich find ihn nicht Java Basics - Anfänger-Themen 3
I ical - Datei auf Server ablegen und Kalender abbonieren Java Basics - Anfänger-Themen 0
T Eclipse - GlassFish Server!? Java Basics - Anfänger-Themen 1
I Java Server Faces mit Glassfish Webseite veröffentlichen Java Basics - Anfänger-Themen 4
M Input/Output tcp-Server mit statischer Parallelität Java Basics - Anfänger-Themen 7
G Multiple Clients and one Server Java Basics - Anfänger-Themen 2
K Java Client > Python Server Java Basics - Anfänger-Themen 0
F jabva 7.21 läuft nicht auf windows server 2012? Java Basics - Anfänger-Themen 9
D Socket ---> Server Socket worauf muss ich achten? Java Basics - Anfänger-Themen 2
S Java - Client/Server mit Stomp kurze Frage Java Basics - Anfänger-Themen 0
I JDK SERVER -jar stoppen Java Basics - Anfänger-Themen 5
Screen Wie Propertydatei im Server beschreiben? Java Basics - Anfänger-Themen 7
K threaded server Java Basics - Anfänger-Themen 18
E Client Server Java Basics - Anfänger-Themen 12
Q Datenbank nicht über separaten Server Java Basics - Anfänger-Themen 4
H Einfache Client/Server-Kommunikation Java Basics - Anfänger-Themen 16
L Chat server Java Basics - Anfänger-Themen 4
O Server Client Problem Java Basics - Anfänger-Themen 2
B Java Server Side Java Basics - Anfänger-Themen 14
H Java Server/Client, HTML Seite anzeigen Java Basics - Anfänger-Themen 2
L Server pingt Client und fordert Info Java Basics - Anfänger-Themen 2
G JObjekte dynamisch vom Server erzeugen lassen Java Basics - Anfänger-Themen 4
A Server logs auslesen Java Basics - Anfänger-Themen 6
Z Threads, Server, GUI Java Basics - Anfänger-Themen 4
M Java class auf Server starten Java Basics - Anfänger-Themen 5
U Java-Programm auf einem Server starten Java Basics - Anfänger-Themen 33
D Java Applet Dateien auf Server auslesen? Java Basics - Anfänger-Themen 8
X Applet - Client/Server Java Basics - Anfänger-Themen 2
N Methoden Test ob Server vorhanden ist Java Basics - Anfänger-Themen 4
S .Bat Server von .java Starten Java Basics - Anfänger-Themen 5
L Server mit mehreren Clients Java Basics - Anfänger-Themen 25
L Bild versenden über Client/Server Java Basics - Anfänger-Themen 10
S Klassen Server und Client Java Basics - Anfänger-Themen 3
M Client - DB-Server Struktur Java Basics - Anfänger-Themen 7
M daytime-Server Port 13 Java Basics - Anfänger-Themen 2
U Probleme mit Server-Client implementierung Java Basics - Anfänger-Themen 5
O (von Applet) daten an Server übergeben Java Basics - Anfänger-Themen 4
W mehrere clients auf einem server Java Basics - Anfänger-Themen 2
R Server-Daten sichern/verschlüsseln Java Basics - Anfänger-Themen 10
N Applets: Objekte vom Server laden Java Basics - Anfänger-Themen 4
G Server-Client Kommunikation Java Basics - Anfänger-Themen 3
F SQL Server aus Umlaute werden Fragezeichen Java Basics - Anfänger-Themen 4
S FTP Server Java Basics - Anfänger-Themen 3
P Application Server Java Basics - Anfänger-Themen 3
B Object an Server senden, Server antwortet mit objekt? Java Basics - Anfänger-Themen 7
C Bilder von Server zu Server kopieren über Webdav(Sardine) Java Basics - Anfänger-Themen 5
H Java-Server mit Browser ansprechen Java Basics - Anfänger-Themen 19
M Standard-Klassen auf Server nicht verfügbar Java Basics - Anfänger-Themen 7
Spin Server Location is not an Sun Java System Application Server 8.2 Java Basics - Anfänger-Themen 2
Dit_ Daten vom Server in einer Schleife Java Basics - Anfänger-Themen 4
S In Eclipse relativen Pfad fuer Tomcat Server erstellen..? Java Basics - Anfänger-Themen 3
M Verbindung zu einem Server über Eclipse Java Basics - Anfänger-Themen 6
0 Frage zu Architektur: Server eines kleines Spiels Java Basics - Anfänger-Themen 4
G Sessionüberprüfung funktioniert lokal aber nicht auf dem Server! Java Basics - Anfänger-Themen 12
S Chat-Server Java Basics - Anfänger-Themen 6
S Java Applet - Verbindung zum Eigenen Server Java Basics - Anfänger-Themen 2
Z Tomcat Server Kommunikation zu Client Applet Java Basics - Anfänger-Themen 5
M Socket Server Java Basics - Anfänger-Themen 9
B Server-Client mit Thread ausstatten Java Basics - Anfänger-Themen 3
brainray Einfachen RMI Server bei einem Provider zum Laufen bringen Java Basics - Anfänger-Themen 3
brainray Server abbrechen mit CTRL-C Java Basics - Anfänger-Themen 2
H Server & Applet Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben