Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Brauche dringend Hilfe..... Ich will das die Methode speichern erst aufgerufen wird wenn das Array vom Typ Kundenauftrag voll ist. Wie kriege ich das hin habe es mit Referenzen vergelichen versucht.... Komme aber nicht vorran bitte um Hilfe.
Java:
public class Threadspeichern extends Thread {
Kundenauftrag kunden;
static int i = 0;
public void run(){
Kunde kunde= KundePanel.kundeobjekt();
Artikel [] ref = Leinwand.objekt(ArtikelPanel.groesse()) ;
Preis preis = PreisPanel.preisobjekt();
Kundenauftrag kdnauftrag = new Kundenauftrag(ref,kunde,preis);
Kundenauftrag kd []= new Kundenauftrag [10];
for(int i = 0; i< kd.length ;i++){
if( kontrolle(kdnauftrag) == kdnauftrag ){
kd [i]= kdnauftrag;
}
else
if(kontrolle (kdnauftrag)== kdnauftrag ){
kd [i]= kdnauftrag;
kunden = kdnauftrag;
}
}
if(kd [9]!= null){
kdnauftrag.speichern();
}else{
return;
}
int j = 0;
double result = 0;
for ( j =0; j< 100000000;j++){
result+= Math.pow(2, 2);
System.out.println(result);
}
}
private Kundenauftrag kontrolle( Kundenauftrag kundenauftrag) {
if(i<1){
kunden = kundenauftrag;
return kunden;
}
else
{
return kunden;
}
}
}
also ich finde das serh konfus was Du da geschrieben hast.
Eine statische Variable i die nie hochgezählt wird.
Ein Thread der immer wieder beim Aufruf ein Array anlegt, was wohl nie voll wird.
Zwei Vergleiche auf Referenzen, die sich dann nur in einer Aktion unterscheiden.
Eine Schleife die eine Zahl berechnet und ausgibt.
Kannst Du mal erklären was Du machen willst?
Ich vermute noch mehr Fehler.
Dieser Thread wird aufgerufen wenn ich auf ein Button drücke. Es soll ein Objekt vom Typ Kunde, Artikel und Preis erzeugt werden. Diese Objekte sollen als Aktuallparameter in den Konstruktor vom Kundenauftrag übergeben werden.
Die Methode speichern schreibt die die Daten in eine Textdatei. Nun will ich erstmal die mehrere Objekte vom Typ Kundenauftrag haben bevor ich die Methode speichern aufrufe. Da ich meine Threads asynchron laufen lassen will.
da Dein Code schwer verständlich ist und manche Dinge sich mir nicht erschließen, habe ich nur mal ansatzweise eine Lösung für Dich.
Java:
public class Threadspeichern extends Thread {
Kundenauftrag kunden;
static int i = 0;
public void run() {
Kundenauftrag kd[] = new Kundenauftrag[10];
for (int i = 0; i < kd.length; i++) {
Kunde kunde = KundePanel.kundeobjekt();
Artikel[] ref = Leinwand.objekt(ArtikelPanel.groesse());
Preis preis = PreisPanel.preisobjekt();
Kundenauftrag kdnauftrag = new Kundenauftrag(ref, kunde, preis);
kd[i] = kdnauftrag;
if (kontrolle(kdnauftrag) == kdnauftrag) {
kunden = kdnauftrag;
}
}
if (kd[9] != null) {
kdnauftrag.speichern();
} else {
return;
}
int j = 0;
double result = 0;
for (j = 0; j < 100000000; j++) {
result += Math.pow(2, 2);
System.out.println(result);
}
}
private Kundenauftrag kontrolle(Kundenauftrag kundenauftrag) {
if (i < 1) {
kunden = kundenauftrag;
return kunden;
} else {
return kunden;
}
}
}
Du musst IN der Schleife neue Objekte erstellen und IMMER zuweisen.
Nicht nur im if-Block, denn sonst können Lücken enstehen.
Die Abfrage auf null sollte es eigentlich tun...
Bitte was soll die Methode "kontrolle" machen?
Warum hast Du i als static deklariert?
Hast Du Aradauers Tipp von richtigem Formatieren nicht bemerkt?
Ich habe es jetzt mal notdürftig formatiert und nur in der Schleife etwas verändert.
Tut mir leid ich weiß das es da viel durcheinander gibt. Das kommt davon weil ich irgendwann nicht mehr weiter wusste und alles möglich mal rum probiert habe. Eigentlich ist nur der Code wichtig! Immer wenn ich auf das Button speichern drücke, soll ein Kundenauftrag erzeugt werden. Der Auftrag soll aber nicht sofort in eine Textdatei geschrieben werden. Erst wenn das Array voll ist soll die Methode speichern aufgerufen werden. Wegen dem Event Dispatch Thread rufe ich diesen Tread über die invokeLater Methode auf. So wie ich es hier raus lese wird die Methode gelich aufgerufen. Da die Bedingung dafür immer erfüllt ist.
Java:
public class Threadspeichern extends Thread {
Kundenauftrag kunden;
public void run() {
Kundenauftrag kd[] = new Kundenauftrag[10];
for (int i = 0; i < kd.length; i++) {
Kunde kunde = KundePanel.kundeobjekt();
Artikel[] ref = Leinwand.objekt(ArtikelPanel.groesse());
Preis preis = PreisPanel.preisobjekt();
Kundenauftrag kdnauftrag = new Kundenauftrag(ref, kunde, preis);
kd[i] = kdnauftrag;
}
if (kd[9] != null) {
for(int i= o;i< kd.length;i++){
kd[i].speichern();
}
} else {
return;
}
}
}
}
Ok, letzter Versuch meinerseits...ist irgendwie unbefridigent nie ine vernüftige Antwort zu erhalten.
Das Du das erst Speichern willst, wenn das Array voll ist ist klar. Das hast Du nun ja auch schon dreimal wiederholt.
In Deiner Schleife wird höchstwahrscheinlich zehmal hinteeinander das gleiche oBjekt erstellt und gespeichert.
Du hast meinen korrigierten Cod4e nichtmal gelesen, richtig? Sonst wäre Dir aufgefallen, dass das alles so kein Sinn macht.
Es ist unklar wo die Daten herkommen. Ein Thread heißt nicht, dass der Code automatisch unendlich lange ausgeführt wird. Also ist das Erstellen Deiner Kundenauftrags-Objekte ziemlich merkwürdig. Und wie auch schon im letzten Kommentar gesagt, ist die Abfrage auf null ok, nur Du musst bei jedem Schleifendurchlauf ein Objekt erstellen. Ich glaube Du hast grobe Denkfehler in Deiner Anwednung und ohne ein TECHNISCHE Erklärung was Du vorhast, muss man ziemlich gut raten können.
Wie kriege ich es hin das im mein Array nicht die gleichen 10 Objekte gespeichert werden???? Sondern beim Knopfdruck immer ein neues hineingespeichert wird. Bis das Array voll ist.