Zum Inhalt springen

Problem mit finally block


frang81

Empfohlene Beiträge

Hab ein Problem mit dem finally block, eclipse meckert den an!

Hat einer ne Ahnung warum?? Bin absoluter Neuling auf dem Gebiet!!!!

Fehlermeldung: Finally Block does not complete normally

Quelltextauszug:

} finally {

try {

if (pst != null) pst.close();

} catch (SQLException se) {

}

return (updated == 0 ? false : true);

}

}

Hat einer ne Idee? Ich vermute das es mit dem return zusammen hängt, aber wie mache ich das anders???

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hat einer ne Idee? Ich vermute das es mit dem return zusammen hängt, aber wie mache ich das anders???

Richtig, du solltest in einem finally-Block kein return verwenden. Stell dir einfach mal folgende Situation vor:


try {

  return 1;

} finally {

  return 2;

}

Und was würdest du jetzt als return Wert erwarten? Richtig - sowohl 1 als auch 2 wäre vom Gefühl her richtig. Mehr dazu hier:

http://www.theone.ru/lists/comp.lang.java.programmer/msg10196.html

http://krakatoa.lri.fr/papers/langspec-2.0/exceptions.doc.html

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich rätsel mir auch noch einen zurecht! Die alte Java Version hats nicht angemeckert! 115 Stellen im QT sind betroffen!

Hat einer ne Idee wie man das schnell abändern kann, irgendwas universales was man nur abändern muss? Sonst häng ich heute die ganze Nacht da drüber wenn ich jede Stelle einzelnd überdenken muss! :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

Er versucht 1 zurück zu geben, das kann nicht fehlschlagen, was dann doch eigentlich bedeuten müsste, dass er den finally block überhaupt nicht erreicht, oder? ^^
Falsch!

Informiere dich darüber, wie das Exception-Handling funktioniert.

http://www.google.com/search?hl=de&ie=ISO-8859-1&q=java+exceptions

Der finally Block wird immer durchlaufen, das ist ja gerade der Witz an der ganzen Geschichte. Damit kannst du sicherstellen, dass beispielsweise cleanup Operation sowohl bei Erfolg, als auch bei einem Fehler statt finden - aber befasse dich ausführlich mit der gesamten Thematik, dann wird das auch klar.

Hat einer ne Idee wie man das schnell abändern kann, irgendwas universales was man nur abändern muss? Sonst häng ich heute die ganze Nacht da drüber wenn ich jede Stelle einzelnd überdenken muss!
Es wird dir, wenn du es sauber haben willst, nicht anderes übrig bleiben, als jede einzelne Stelle durchzugehen und zu gucken, was da jetzt genau gecodet ist. Woher soll irgendein Tool wissen, was du mit den Befehlen an der Stelle anstellen willst? Klarer Fall für die Glaskugel.

Die Warning selber kannst du zwar im Eclipse abstellen (Stichwort Compiler-Options) aber damit wirst du das Problem an sich nicht loswerden. Die Warnung ist ja schließlich dazu da, um zu signalisieren "Das könnte zu undefiniertem Verhalten führen, also entweder beheben oder sich hinterher nicht wundern, wieso etwas schief läuft".

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wird mir eh nichts anderes übrig bleiben als mich mal intensiver mit der thematik zu befassen @perdi ... weil 1. wird bei uns in Bielefeld Java in der Berufsschule als programmiersprache unterrichtet (lachhaft, weiß ich) und wir Programmieren hier in der Firma ausschließlich in Java. Man dankt für den Hinweis :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

Das Problem hat sich nun erledigt!

Von 115Warnungen hab ich nur noch 8 übrig. Ich weiß echt nicht wie ne Firma uns sowas abgeben konnte!

Die 8 Warnungen beziehen sich alle auf:

int y = datum.getYear();

int mo = datum.getMonth()+1;

int d = datum.getDate();

int h = datum.getHours();

int mi = datum.getMinutes();

int s = datum.getSeconds();

etc.

Meldung:

The method getDate() from type Date is deprecated (variiert natürlich je nach get methode)

so wie ich das verstehe wird die get Funktion in der nächsten Version nicht mehr unterstützt. Was kann ich tun, wie formuliere ich das neu so dass es in der Zukunft weiterhin funktioniert??

Software:

Eclipse Platform Version: 3.1.0

jdk1.3.1_04

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

deprecated bedeutet nicht, das es Sie in der nächster Version nicht mehr geben wird, also in 1.4.2.06 ist die Klasse Date immer noch enthalten. Es kann nur sein, das diese irgendwann mal nicht mehr da ist.

Statt Date solltest du den GregorianCalendar benutzen, der ist eigentlich dafür reingekommen.

Viel Spaß

-- Ich würde auch gerne wieder JAVA programmieren :( ---

Link zu diesem Kommentar
Auf anderen Seiten teilen

so wie ich das verstehe wird die get Funktion in der nächsten Version nicht mehr unterstützt. Was kann ich tun, wie formuliere ich das neu so dass es in der Zukunft weiterhin funktioniert??
Du solltest, wenn du direkt auf Infos wie Tag, Woche, etc. zugreifen will nicht java.util.Date sondern java.util.Calendar verwenden - genauso, wie es auch im Javadoc steht.

Deprecated. As of JDK version 1.1, replaced by Calendar.get(Calendar.DAY_OF_WEEK).

Mehr hier:

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Calendar.html

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mh, vielleicht musst Du die Klasse noch importieren?


import java.util.Calendar;

Ein

import java.util.Date;

müsste da ja schon stehen... Wenn in der Klasse aber ein

import java.util.*;

steht, weiß ich jetzt auf die schnelle auch nichts. Das würde nämlich bedeuten, dass er bereits alle Klassen aus dem genannten Package importiert hat (inkl. Calendar).

Gruß, Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das mit Calendar laufen zu lassen, kennt er nicht!
Ich frage nochmal: Wie äussert sich dieses "kennt er nicht"? Welchen Code verwendest du, und welche Fehlermeldung inklusive Stacktrace wird dir ausgegeben?

Wenn du Hilfe haben willst musst du schon die genauen Ursachen ein bisschen deutlicher schildern, ansonsten ist das ein Fall für:

glaskugel.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der quellcode:

java.util.Calendar datum = new java.util.Calendar();

int y = datum.getYear();

if (y < 1000) y+=1900;// warum nicht y < 100 bei zB. 1997?? bei 2005???

int mo = datum.getMonth()+1;

// int d = datum.getDate();

int d = datum.getCalendar(DAY_OF_MONTH);

int h = datum.getHours();

int mi = datum.getMinutes();

int s = datum.getSeconds();

Die anderen Fragen kann ich dir nicht beantworten da ich nicht weiß was ein Stacktrace ist! Arbeite das erste mal mit eclipse und java...

Importiert hatte ich die klasse schon ;-) Danke trotzdem...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Klasse Calendar ist abstrakt. Du kannst daher keine neue Instanzen der Klasse mit dem new-Operator erzeugen. So kannst Du dir ein Calendar-Objekt holen:


java.util.Calendar datum = Calendar.getInstance();

Das ist ein Beispiel für einen Stacktrace:

java.lang.NullPointerException

at de.xxx.xxx.xxx.xxx.xxx.HobbiesWaehlenDialog.bOk_actionPerformed(HobbiesWaehlenDialog.java:144)

at de.xxx.xxx.xxx.xxx.xxx.HobbiesWaehlenDialog_bOk_actionAdapter.actionPerformed(HobbiesWaehlenDialog.java:181)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1764)

at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1817)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:419)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:257)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245).......

;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

java.util.Calendar datum = new java.util.Calendar();
Das kann nicht funktionieren. Calendar ist eine abstrakte Klasse, von der du keine Instanzen erzeugen kannst. Um eine Calendar korrekt zu erzeugen musst du Calendar.getInstance() verwenden.

Die anderen Fragen kann ich dir nicht beantworten da ich nicht weiß was ein Stacktrace ist! Arbeite das erste mal mit eclipse und java...
Dann wirst du dich damit näher beschäftigen müssen, wenn du das Problem beseitigen willst. Sowas ist nicht mal eben in zwei Sätzen erklärt, du brauchst schon einen gewissen Background damit du auch verstehst, wieso du eigentlich diese und jene Änderung/Ergänzung gemacht hast - sonst wirst du immer wieder an den verschiedensten Stellen auf Fehler laufen.
Link zu diesem Kommentar
Auf anderen Seiten teilen

So hats geklappt:

GregorianCalendar cal=new GregorianCalendar();

int y = cal.get(Calendar.YEAR);

if (y < 1000) y+=1900;// warum nicht y < 100 bei zB. 1997?? bei 2005???

int mo = cal.get(Calendar.MONTH)+1;

int d = cal.get(Calendar.DATE);

int h = cal.get(Calendar.HOUR_OF_DAY);

int mi = cal.get(Calendar.MINUTE);

int s = cal.get(Calendar.SECOND);

Danke vielmals...

Link zu diesem Kommentar
Auf anderen Seiten teilen

So hats geklappt:

GregorianCalendar cal=new GregorianCalendar();

int y = cal.get(Calendar.YEAR);

if (y < 1000) y+=1900;// warum nicht y < 100 bei zB. 1997?? bei 2005???

int mo = cal.get(Calendar.MONTH)+1;

int d = cal.get(Calendar.DATE);

int h = cal.get(Calendar.HOUR_OF_DAY);

int mi = cal.get(Calendar.MINUTE);

int s = cal.get(Calendar.SECOND);

Danke vielmals...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...