Thema: Delphi Keine Rückmeldung

Einzelnen Beitrag anzeigen

Samufi

Registriert seit: 27. Nov 2008
Ort: Güstrow
93 Beiträge
 
Turbo Delphi für Win32
 
#1

Keine Rückmeldung

  Alt 13. Dez 2009, 18:43
Hallo,
das Programm, das ich geschrieben habe stürzt an einer bestimmten Stelle manchmal ab (ca. drei mal bei vier Versuchen) - es erscheint im Taskmanager "keine Rückmeldung", ich bekomme aber keine Fehlermeldung von Delphi.
Das Programm lädt kurz vor (oder bei) Auftreten des Problems eine Datei von einem FTP-Server (die zur Laufzeit von einem anderen hochgeladen wird), die kommt aber ohne Probleme auf dem Rechner an (sonst hätte ich eine Fehlermeldung erhalten) - in den Problemfällen war diese aber leer. Dass sie leer war kann an dem vielleicht zeitgleich erfolgten Upload liegen; da die Download-Procdure aber mittels eines Timers immer wiederholt wird und ich für den Fall, dass die Datei leer ist ein "exit" eingebaut habe, sollte das kein Problem darstellen. Hier die entsprechende Procedure:
Delphi-Quellcode:
procedure TForm7.TimerRefreshTimer(Sender: TObject);
var ListeSpiel:TListBox;J,Start:Integer;SpielerLabel:TLabel;SpielName2:String;
begin
ListeSpiel:=TListBox.Create(Form1);
ListeSpiel.Parent:=Form1;
ListeSpiel.visible:=false;
SpielName2:=SpielName.Text;
if ftp.getfile('wizard/'+SpielName2, SpielName2+'.wz')=false then
  begin
    SpielAbgebrochen;
    exit;
  end;
if fileexists(SpielName2+'.wz') then ListeSpiel.Items.LoadFromFile(SpielName2+'.wz') else ftp.Fehlermeldung;
if ListeSpiel.Count=0 then exit; //Hier versuche ich den Fall einer leeren Datei zu umgehen...

if ListeSpiel.Count-1<StrtoInt(ListCount.text) then Start:=0 else Start:=StrtoInt(ListCount.text);
for J := Start to ListeSpiel.Count - 1 do
  begin
      if (form1.Wort(1,ListeSpiel.Items[J])='setzen') then
        begin
          SpielerLabel:=TLabel(Form7.FindComponent('DLabel'+form1.Wort(2,ListeSpiel.Items[J])));
          SpielerLabel.Caption:=SpielerLabel.Caption+' ('+form1.Wort(3,ListeSpiel.Items[J])+')';
        end;
      if (form1.Wort(1,ListeSpiel.Items[J])='setzenReihnfolge') then
        begin
          if (form1.Wort(2,ListeSpiel.Items[J])=Reihnfolge.Text) then setzen else StatusBar1.Panels[0].Text:=SpielerNamen.Items[StrtoInt(form1.Wort(2,ListeSpiel.Items[J]))-1]+' setzt.';
        end;
    if (form1.Wort(1,ListeSpiel.Items[J])='Zug') then
      begin
          if (form1.Wort(2,ListeSpiel.Items[J])=Reihnfolge.Text) then Zug else StatusBar1.Panels[0].Text:=SpielerNamen.Items[StrtoInt(form1.Wort(2,ListeSpiel.Items[J]))-1]+' ist am Zug.';
      end;
    if (form1.Wort(1,ListeSpiel.Items[J])='ausspielen') then
      begin
        if not (form1.Wort(2,ListeSpiel.Items[J])=Reihnfolge.text) then gelegt(form1.Wort(3,ListeSpiel.Items[J]),form1.Wort(2,ListeSpiel.Items[J]));
      end;
    if (form1.Wort(1,ListeSpiel.Items[J])='StichEnde') then
      begin
        SpielerStiche.Items[StrtoInt(StichSieger.text)-1] := Inttostr(StrtoInt(SpielerStiche.Items[StrtoInt(StichSieger.text)-1])+1);
        Stich.Clear;
        if Reihnfolge.text='1then Zug;
      end;
    end;
ListCount.Text:=InttoStr(ListeSpiel.count-1);
ListeSpiel.Free;
end;
Die geladene Datei sollte zwei Zeilen beinhalten, in der einen die Wörter "setzen", "Spieler1" und "5", in der zweiten "Zug" und "1". Ich bin mir durchaus bewusst, dass man aus dem bisschen Quelltext, das ich jetzt gepostet habe nicht so wirklich schlau wird und auch dass der Stil zu wünschen übrig lässt. Bei Bedarf schreibe ich gerne mehr, wahrscheinlich bräuchte man zum umfassenden Verstehen fast alles und das will ich euch nun doch nicht antun ...
Meine Frage ist eher, wo der Fehler liegen könnte, wo ich suchen muss - ich habe es schon längere Zeit versucht, bin aber ratlos. Wisst ihr, was so einen Programmabsturz - noch dazu in so einer Unregelmäßigkeit verursachen kann? (Die Unregelmäßigkeit könnte von der Datei ausgehen, aber warum führt eine leere Datei zum Programmabsturz? (Ich dachte, ich hätte das mit "if ListeSpiel.Count=0 then exit;" umgangen...))
Ich habe mich wahrscheinlich nicht sehr verständlich ausgedrückt, ich versuche gerne, Nachfragen zu beantworten. Letztendlich geht es mir aber vor allem um Ideen, wo ich suchen könnte...
Vielen Dank schon mal fürs Durchwurschteln!
Treuergebenst,
Samufi

[edit=alzaimar] Leerzeichen in der sehr langen Codezeile eingefügt Mfg, alzaimar[/edit]
  Mit Zitat antworten Zitat