Client-Server Button Problem

  • Themenstarter Themenstarter Sk1nwalk3r
  • Beginndatum Beginndatum
S

Sk1nwalk3r

Nabend,

ich habe ein großes Problem.
Ich möchte eine GUI schreiben welche mir von meinem Server Inhalte von einer ArrayListe ausliest.

Jetzt möchte ich im Client einen Button haben - mit welchem ich den nächsten Datensatz ausgeben kann.

Meine bisherigen Versuche sind alle kläglich gescheitert.
Daher sind meine Codebeispiele auch zu nix zu gebrauchen.

Was ich auch noch machen möchte, wenn ich die Datei speichere und die es die Datei schon gibt. dann werde ich gefragt ob ich sie überschreiben will ...
aber die Ja Nein Buttons funktionieren auch nicht - ich konnte das vorher über die Konsole über nextLine(); ohne probleme machen.

Bitte helft mir - bin für alle Ideen offen.

Grüße
Ma#
 
Für Punkt a würde ich dir Stack statt List empfehlen.
Für Punkt b zeig mal was du so hast, dann werden wir schon rausfinden warum das OptionPane nicht hinhaut.
 
Ok also mein Client beim Daten auflisten sieht so aus - das ganze läuft in einer switch anweisung.

case 2:
/**
* Optionsvariable wird zum Server gesendet
*/
writetoserver.writeInt(option);
writetoserver.flush();
/*
lblcnachricht.setText("Methode Dateiauflisten wird ausgefuehrt");
lblcnachricht.setLocation(25,10);
lblcnachricht.setVisible(true);
*/

/**
* ArrayList Größe wird vom Server gelesen
*/
arraysize = readfromserver.readInt();

/**
* Sollte die Größe der ArrayList > 0 sein wird g auf 0 gesetzt.
*/
if (arraysize > 0) {
btnweiter.setLocation(50, 270);
btnweiter.setVisible(true);

g = 0;

/**
* ArrayList wird vom Server empfangen und ausgegeben.
* Geschieht solange bis die ArrayList Größe erreicht wurde.
*/
while (g < arraysize) {
lbldatensatz.setText(readfromserver.readUTF());
lbldatensatz.setVisible(true);
lblname.setText(readfromserver.readUTF());
lblname.setVisible(true);
lblvorname.setText(readfromserver.readUTF());
lblvorname.setVisible(true);
lblanrede.setText(readfromserver.readUTF());
lblanrede.setVisible(true);
lblstrasse.setText(readfromserver.readUTF());
lblstrasse.setVisible(true);
lblplz.setText(readfromserver.readUTF());
lblplz.setVisible(true);
lblort.setText(readfromserver.readUTF());
lblort.setVisible(true);
lbltelefon.setText(readfromserver.readUTF());
lbltelefon.setVisible(true);
lblfax.setText(readfromserver.readUTF());
lblfax.setVisible(true);
lblbemerkung.setText(readfromserver.readUTF());
lblbemerkung.setVisible(true);

g++;

btnweiter.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
try {
writetoserver.writeUTF("weiter");
} catch (IOException e) {
e.printStackTrace();
}
}
});
}



/**
* Rückmeldung des Servers wird ausgegeben.
*/
/*
lblsnachricht.setText(readfromserver.readUTF());
lblsnachricht.setLocation(25,300);
lblsnachricht.setVisible(true);
*/
}

else {
lblsnachricht2.setText(readfromserver.readUTF());
lblsnachricht2.setLocation(25,10);
lblsnachricht2.setVisible(true);
}

/**
* Am Ende wird das Menue wieder angezeigt
*/
//Zeigemenue();
break;

Dazu der passende Server ausschnitt:

case 2:
System.out.println("Client " + clientnr
+ " ruft Datenauflisten ab");
log.Schreibelog("Client " + clientnr
+ " ruft Datenauflisten ab");

/**
* ArrayList Größe wird bestimmt und an den Client gesendet
*/
arraysize = adressliste.size();

writetoclient.writeInt(arraysize);
writetoclient.flush();

/**
* Enthaelt die ArrayList mindestens 1 Element wird diese
* ausgelesen und an den Client übergeben.
*/
if (arraysize > 0) {

g = 0;
for (ConnectionHandler adressen : adressliste) {
adressliste.get(g);
writetoclient.writeUTF("Datensatz Nr. " + (g + 1)
+ "\n");
writetoclient.writeUTF("Name: " + adressen.name);
writetoclient.writeUTF("Vorname: "
+ adressen.vorname);
writetoclient
.writeUTF("Anrede: " + adressen.anrede);
writetoclient.writeUTF("Strasse: "
+ adressen.strasse);
writetoclient.writeUTF("PLZ: " + adressen.plz);
writetoclient.writeUTF("Ort: " + adressen.ort);
writetoclient.writeUTF("Telefon: "
+ adressen.telefon);
writetoclient.writeUTF("Fax: " + adressen.fax);
writetoclient.writeUTF("Bemerkung: "
+ adressen.bemerkung + "\n");
/*writetoclient
.writeUTF("Fuer naechsten Datensatz bitte Enter "
+ "druecken");*/

String weiter = readfromclient.readUTF();

if(weiter.equals("weiter")){
g++;
}


}

log
.Schreibelog("Client "
+ clientnr
+ " Methode Datenauflisten wurde erfolgreich ausgefuehrt");
/**
* Rückmeldung wird an den Client gesendet.
*/
writetoclient
.writeUTF("Methode Datenauflisten erfolgreich ausgefuehrt\n");
System.out.println("Client " + clientnr
+ " Datenauflisten abgeschlossen");

/**
* Sollt die ArrayList leer sein - wird dies dem Client
* mitgeteilt.
*/
} else {
/**
* Rückmeldung wird an den Client gesendet
*/
writetoclient
.writeUTF("Keine Daten zum Anzeigen vorhanden!\n");
writetoclient.flush();
log.Schreibelog("Client " + clientnr
+ " Keine Daten zum Anzeigen vorhanden!");
System.out.println("Client " + clientnr
+ " keine Daten zum Anzeigen vorhanden!");
System.out.println("Client " + clientnr
+ " Datenanauflisten abgeschlossen");
}

break;


Und wenn ich jetzt speichern will - hier der Client:

case 3:

/**
* Optionsvariable wird zum Server gesendet
*/
writetoserver.writeInt(option);
writetoserver.flush();
/*
lblcnachricht.setText("Methode Dateisichern wird ausgefuehrt");
lblcnachricht.setLocation(25,10);
lblcnachricht.setVisible(true);
*/

/**
* Wenn der Server eine 1 sendet dann ist die Datei bereits
* vorhanden und der Client muss das Überschreiben bestätigen.
* Danach wird das Ergebnis ausgegeben.
*/

int dateida = readfromserver.readInt();

if (dateida == 1) {
lblsnachricht.setText(readfromserver.readUTF());
lblsnachricht.setLocation(25,10);
lblsnachricht.setVisible(true);

btnja.setLocation(50, 40);
btnnein.setLocation(150, 40);
btnja.setVisible(true);
btnnein.setVisible(true);

btnja.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){

try {
jn = "j";
//writetoserver.writeUTF("j");
//writetoserver.flush();

} catch (Exception e) {
e.printStackTrace();
}
}
});

btnnein.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){

try {
jn = "n";
//writetoserver.writeUTF("n");
//writetoserver.flush();

} catch (Exception e) {
e.printStackTrace();
}
}
});


if(jn.equals("j")){
writetoserver.writeUTF(jn);
}
else if(jn.equals("n")){
writetoserver.writeUTF(jn);
}

lblsnachricht2.setText(readfromserver.readUTF());
lblsnachricht2.setLocation(25,70);
lblsnachricht2.setVisible(true);

}
/**
* Liefert der Server etwas anderes als die 0 zurück - wurde die
* Datei gespeichert und die Rückmeldung des Servers wird
* ausgegeben
*/
else {
lblsnachricht.setText(readfromserver.readUTF());
lblsnachricht.setLocation(25,10);
lblsnachricht.setVisible(true);
}

/**
* Am Ende wird das Menue wieder angezeigt
*/
//Zeigemenue();
break;

und der Server:

case 3:
System.out.println("Client " + clientnr
+ " ruft Dateisichern ab");
log.Schreibelog("Client " + clientnr
+ " ruft Dateisichern ab");

try {
/**
* Es wird ein neuer Filehandler erstellt - welcher auf
* die Datei "adreli.csv" verweist.
*/
File datei = new File(Server.dateiname);

/**
* Wenn die Datei bereits vorhanden ist wird dies dem
* Client mitgeteilt.
*/
if (datei.exists()) {
writetoclient.writeInt(1);
writetoclient
.writeUTF("Datei bereits vorhanden - überschreiben?");

/**
* Die Eingabe des Clients wird eingelesen.
*/
jn = readfromclient.readUTF().toLowerCase();
System.out.println(jn);
/**
* Wenn der Inhalt der Variable jn = j ist wird der
* Inhalt der Arraylist in die Datei geschrieben.
*/
if (jn.equals("j")){
BufferedWriter dateischreiben = new BufferedWriter(
new FileWriter(Server.dateiname));

dateischreiben
.write("Name,Vorname,Anrede,Strasse,PLZ,Ort,Telefon,"
+ "Fax,Bemerkung");
dateischreiben.newLine();

int g = 0;
for (ConnectionHandler aw : adressliste) {
adressliste.get(g);
dateischreiben.write(aw.name + ",");
dateischreiben.write(aw.vorname + ",");
dateischreiben.write(aw.anrede + ",");
dateischreiben.write(aw.strasse + ",");
dateischreiben.write(aw.plz + ",");
dateischreiben.write(aw.ort + ",");
dateischreiben.write(aw.telefon + ",");
dateischreiben.write(aw.fax + ",");
dateischreiben.write(aw.bemerkung + ",");
dateischreiben.newLine();
g++;
}

dateischreiben.close();

/**
* Rückmeldung wird an den Client gesendet
*/
writetoclient.writeUTF("Daten gesichert!");
writetoclient.flush();

} else if (jn.equals("n")) {
/**
* Sollte der Client n übertragen wird das
* Speichern abgebrochen und die Rückmeldung
* wird an den Client gesendet
*/
writetoclient
.writeUTF("Das Speichern wurde nicht abgeschlossen!");
writetoclient.flush();

}

else {
/**
* Sollte der Client eine falsche Eingabe (nicht
* j oder n) senden wird eine Fehlermeldung an
* den Client gesendet.
*/
writetoclient
.writeUTF("Falsche Eingabe - bitte wiederholen!");
writetoclient.flush();
}
}

/**
* Sollte die Datei noch nicht vorhanden sein - wird
* diese direkt gespeichert
*/
else {

writetoclient.writeInt(0);

BufferedWriter dateischreiben = new BufferedWriter(
new FileWriter(Server.dateiname));

dateischreiben
.write("Name,Vorname,Anrede,Strasse,PLZ,Ort,Telefon,"
+ "Fax,Bemerkung");
dateischreiben.newLine();

int g = 0;
for (ConnectionHandler aw : adressliste) {
adressliste.get(g);
dateischreiben.write(aw.name + ",");
dateischreiben.write(aw.vorname + ",");
dateischreiben.write(aw.anrede + ",");
dateischreiben.write(aw.strasse + ",");
dateischreiben.write(aw.plz + ",");
dateischreiben.write(aw.ort + ",");
dateischreiben.write(aw.telefon + ",");
dateischreiben.write(aw.fax + ",");
dateischreiben.write(aw.bemerkung + ",");
dateischreiben.newLine();
g++;
}

dateischreiben.close();

/**
* Rückmeldung wird an den Client gesendet
*/
writetoclient.writeUTF("Daten gesichert!");
writetoclient.flush();
}
}

/**
* Sollte die Datei nicht vorhanden sein - wird dies als
* Fehlermeldung ausgegeben
*/
catch (FileNotFoundException dng) {
writetoclient.writeUTF(dng.getMessage());
}

/**
* Sollte die Eingabe im falschen Format sein - wird dies
* als Fehlermeldung ausgegeben
*/
catch (IOException ff) {
writetoclient.writeUTF(ff.getMessage());
}

log
.Schreibelog("Client "
+ clientnr
+ " Methode Dateisichern wurde erfolgreich ausgefuehrt");
System.out.println("Client " + clientnr
+ " Dateisichern abgeschlossen");

break;

Also sockets hab ich DataInput/Output Streams ...

Ich möchte im grunde nur das wenn ich die Button drücke das was ich dann übertrage auch gemacht wird - ich bin schon mal soweit das die Buttons und auch die ActionListener angelegt werden - aber nicht ausgeführt werden.

Wenn ich nach den ActionListener die jeweilige Angabe mache dann gehts - nur dann wärs ja keine auswahl :D

Gruß
Sk1nwalk3r
 
Du erwartest doch nicht ernsthaft, das das irgendjemand hier ließt, oder? Oo
Entferne alles unnötige, und schreibe es in nen gescheiten Formations-Tag.
 
Zuletzt bearbeitet:
Zurück