Absturz wegen zip.dll?!
-
Hallo zusammen. Ich habe ein Programm geschrieben, dass ein ZipFile ausliest.
Mein Problem ist nun, dass das Programm in unregelmässigen Abständen abstürzt. Nach langem Versuchen habe ich dann 2 Zeilen in meinem Code ausfindig gemacht, die den Fehler verursachen.
Nachfolgend etwas Quellcode mit den Fehlerzeilen:public Vector getResources() throws IOException { //search for *.rc file in the zipfile: ZipEntry entry; Vector rcEntries = new Vector(); //enum contains ZipEntries of the zipfile Enumeration enum = zippi.entries(); //zippi ist ein Object vom Typ ZipFile while(enum.hasMoreElements()) { entry = (ZipEntry)enum.nextElement(); //HIER KOMMT DER FEHLER!!! if(!entry.isDirectory()) { //test, if File ends with ".rc": if(entry.getName().endsWith(".rc")) { //search for *.h files in the *.rc file //and create a new ResourceEntry ... } } } return rcEntries; }
Und dann auch noch mein zweites Problemkind:
private String getObjId(String rcHeader, String rcFile, String objName) throws IOException { System.out.println(rcHeader); InputStream in = zipFile.getInputStream(zipFile.getEntry(rcHeader)); //FEHLER BEI zipfile.getEntry !!! BufferedReader bReader = new BufferedReader(new InputStreamReader(in)); String line; int index; while((line=bReader.readLine()) != null) { line = line.trim(); if(line.indexOf(objName) > -1) { bReader.close(); in.close(); return line.substring(line.lastIndexOf(' ')+1); } } bReader.close(); in.close(); return null; }
Und die Fehlermeldung dazu:
An unexpected exception has been detected in native code outside the VM.
Unexpected Signal : EXCEPTION_ACCESS_VIOLATION occurred at PC=0x6D33797D
Function=ZIP_Open+0x369
Library=C:\Program Files\Java\j2re1.4.1_02\bin\zip.dllCurrent Java thread:
at java.util.zip.ZipFile.getEntry(Native Method)
at java.util.zip.ZipFile.getEntry(ZipFile.java:146)
- locked <102207F0> (a java.util.zip.ZipFile)
at data.Parser.getObjId(Parser.java:164) //für den 2. Fehler
at data.Parser.run(Parser.java:101)Dynamic libraries:
0x00400000 - 0x00407000 C:\Program Files\Java\j2re1.4.1_02\bin\javaw.exe
0x77F80000 - 0x77FFB000 C:\WINNT\System32\ntdll.dll
0x77DB0000 - 0x77E0B000 C:\WINNT\system32\ADVAPI32.dll
...Also wenn irgendjemand mir weiter helfen kann, wäre ich euch sehr verbunden.
Ich habe auch mal im Netz nach dem Problem gesucht, allerdings hat mir der Link
nicht wirklich weiter geholfen: http://forum.java.sun.com/thread.jsp?forum=31&thread=358650Ausserdem ist mir aufgefallen, dass das Programm nur bei grösseren ZipFiles abstürzt. Mit einer 6MB ZipFile läuft es wunderbar, mit 50MB stürzt es ab.
Danke schon mal
Gruss Susanne
Danke schon mal.[ Dieser Beitrag wurde am 06.06.2003 um 09:46 Uhr von sawy2 editiert. ]
[ Dieser Beitrag wurde am 06.06.2003 um 09:50 Uhr von sawy2 editiert. ]
-
Ausserdem ist mir aufgefallen, dass das Programm nur bei grösseren ZipFiles abstürzt. Mit einer 6MB ZipFile läuft es wunderbar, mit 50MB stürzt es ab.
Ich denke mal es kommt ein OutOfMemoryError oder? Das kommt daher, weil die JVM standardmäsit AFAIK genau 50 MB zugewiesen bekommt. WEnn du das ändern willst, dann musst du dein Programm mit anderen Parametern starten. Siehe dazu "java -X"
-
Hallo,
Daran habe ich anfangs auch gedacht, aber ich starte das Prog mit dem Argument: -Xms32m -Xmx512m, was ja den Speicherbereich der JVM angeben soll.
Ausserdem habe ich den Speicher im Taskmanager überwacht und der Prozess hat ca. 20 MB und steigt während des Betriebs um maximal 2 MB.
Weisst Du vielleicht noch ne andere Möglichkeit?
Susanne
-
Na ja die Tatsache dass die VM meldet es wäre ein Fehler in der DLL gibt uns quasi keine Chance den Fehler zu entdecken. Versuch das gleiche mal mit einer anderen Version des JDKs
-
Hallo,
also ich habs mit 1.4.1 und 1.3.1 versucht, ohne Besserung.
Allerdings bin ich gerade bei auf die ZipFile per ZipInputStream und nicht mehr mit ZipFile zuzugreifen. Die age stabiliesiert sich langsam.Mal sehen, ob ich das hinbekomme.
Susanne
-
Hallo zusammen,
also ich habe alles auf ZipInputStream umgestellt. Der Nachteil ist, dass das Programm jetzt deutlich langsamer ist, weil man die ZipEntries nicht mehr
direkt anspringen kann.Susanne