Programm im Jar-Format funktioniert nicht richtig

java Novize

Mitglied
Hallo,

ich habe ein sehr seltsames Problem mit meinem Programm 🙁.

Das Programm soll Bild-datein bzw. (.dds) Dateien austauschen, hierzu mal ein kleiner ausschnitt aus dem Code, dazu möchte ich noch sagen, dass der Fehler(meiner Meinung nach) nicht am Quellcode selbst liegt, deshalb schreibe ich erst einmal weiter.

wird Button1 gedrückt, wird im Ordner eine Datei ui_gadgets.dds gelöscht und die Datei ui_gadgets.dds erstellt, die diese dann ersetzt. ( ja, ich weis das es sich um die selben Dateien handelt, dass muss für mein Programm aber so sein).

wird der Button2 gedrückt, wird im Ordner die Date ui_gadgets.dds gelöscht und die Datei ui_gadgets1.dds im Ordner unter dem Namen ui_gadgets.dds gespeichert.

Im Grunde soll das Programm nur Bilder erseten...

Starte ich jetzt das Programm per Eclipse funktioniert es ohne Probleme,
ich kann per GUI bestimmen welches Bild ins Ziel Verzeichnis kopiert werden soll und dort den Platz der ui_gadgets.dds einnehmen soll. !!!

Konvertiere ich das Programm ins Jar Format startet es genau wie in Eclipse, wähle ich nun Button2 sollte die ui_gadgets.dds durch die ui_gadgets1.dds ausgetauscht werden und unter dem Namen ui_gadgets.dds gespeichert werden, genau so funktioniert es auch, WENN ich es per Eclipse starte.

Wenn ich genau das selbe per Jar Datei mache löscht es einfach die ui_gadgets.dds aber stellt nicht die ui_gadgets1.dds her, so wie es bei eclipse funktioniert.

drücke ich nun button1 stellt es meine gelöschte ui_gadgets.dds wieder her.

das bedeutet, dass button1 das macht was er soll aber button2 nur die erste hälfte seiner Funktion(löschen der ui_gadgets.dds) ausführt, die zweite hälfte jedoch NICHT.

Ich habe jetzt mehrere Stunden mit der Fehlersuche verbracht und komme einfach nicht weiter, zu male der Code des Buttons1 fast mit dem von Button2 übereinstimmt. Warum funktioniert der Button2 dann nur zur hälfte ?

Darüberhinaus möchte ich noch einmal Betonen das, dass Programm in vollem Umfang mit dem selben Code beim starten per Eclipse funktioniert.

Java:
if (e.getSource() == button1){   
    infoBox();
    
    File file = new File( eingabe+ "/Mount & Blade With Fire and Sword/Textures/ui_gadgets.dds");
    
    if(file.exists()){
     file.delete();
    }


  


    Path source = Paths.get("ui_gadgets.dds");
    Path destination = Paths.get( eingabe+ "/Mount & Blade With Fire and Sword/Textures/ui_gadgets.dds");
    try {
     Files.copy(source, destination);
    } catch (IOException e1) {
     
     //e1.printStackTrace();
    }
   
     
   }
   if (e.getSource() == button2){   
    infoBox();
   
    
    File file = new File( eingabe+ "/Mount & Blade With Fire and Sword/Textures/ui_gadgets.dds");
    
    if(file.exists()){
     file.delete();
    }






    Path source = Paths.get("ui_gadgets1.dds");
    Path destination = Paths.get( eingabe+ "/Mount & Blade With Fire and Sword/Textures/ui_gadgets.dds");
    try {
     Files.copy(source, destination);
    } catch (IOException e1) {
     
     //e1.printStackTrace();
    }
   }
Entschuldigung für den langen Post, ich weis aber nicht wie ich mein Problem anders darlegen kann

MfG.

Java Novize

Edit:

mir ist gerade noch eingefallen, dass die ui_gadgets1.dds insgesamt 278kb groß ist und die ui_gadgets.dds nur 68 kb, kann das der Grund sein warum Button1 funktioniert und Button2 nur teilweise?
 
Zuletzt bearbeitet von einem Moderator:
sie liegen im Jar Ordner, wie ich bereits erwähnt habe wird das Bild ui_gadgets.dds vom Programm erkannt und auch ausgetauscht und dieses Bild liegt ebenfalls mit der ui_gadgets1.dds in der Jar Datei.

Vorhin ist mir noch etwas seltsames aufgefallen. um zu überprüfen ob es am Quellcode liegt, habe ich bei Button1 die ui_gadgets.dds mit der ui_gadgets1.dds ausgetauscht und die ui_gadgets.dds komplett aus dem Verzeichniss gelöscht.


Somit sollte Button1 genau das selbe wie Button2 machen. Fakt ist, dass nun keiner der zwei Buttons funktioniert, bei beiden wird nur der 1. Part ausgeführt nämlich das Löschen der ui_gadgets.dds.

Das legt den Verdacht nahe, dass es tatsächlich daran liegt, dass mein Programm im Jar Format manche Bilder aus irgend einem Grund nicht erkennt.

Anscheinend kann mein Programm nur die ui_gadgets.dds in der Jar Datei erkennen und auch nur diese Datei, keine andere. Sobald ich die Datei in ui_gadgets1.dds umbenenne funktioniert das Programm nicht mehr auch wenn ich den Code dahingehend verändere das nun die ui_gadgets1.dds kopiert wird und nicht die ui_gadgets.dds .;(

könnte es helfen die Bilder irgendwie auszulagern falls das möglich wäre ?

Wenn ich übrigends das Programm mit selben Quellcode in Eclipse ausführe macht es genau das was es soll und erkennt jedes Bild im Ordner...
 
Zuletzt bearbeitet:
starte mal deine jar über die konsole, und probier dein programm noch mal aus, und schau dir an ob in der konsole etwas ausgegeben wird
 
Ich habe das Programm per Konsole gestartet.

Es gibt keine Fehlermeldung aus und startet ganz normal.

Was könnte der Grund sein warum eclipse meine Bilder erkennt das Programm als Jar aber nicht D: .

Java Novize
 
Zuletzt bearbeitet:
Die Bilder, die vertauscht werden sollen liegen also im Jar drin.
Dann ist es klar, warum das nicht funktioniert. Zum Einen läuft das Programm grade und das Betriebssystem hat deshalb sämtliche Schreibzugriffe auf diese Datei gesperrt. Zum Anderen kannst du nicht mit File arbeiten, da File nur Dateien im Dateisystem des Betriebssystems beschreiben kann. Gelesen werden sie mit Klasse.getClass().getRessource[AsStream]().
 
Hallo leute,

ich danke euch für eure Hilfe, der Fehler ist nun beseitigt!

Die Lösung war:

- das Programm im Jar Format zu öffnen (mit 7zip).
- In den class Ordner wechseln.
- die Bilder per Hand rein kopieren

das bedeutet, dass Eclipse die Bilder nicht mit ins Jar Format "kopiert"... darauf hätte ich auch früher kommen können...

trotzdem danke an alle die sich die Mühe gemacht haben mir zu helfen!

Mfg.

Java Novize
 
Das kann eclipse aber auch automatisch. Du musst einfach eclipse mitteilen, dass die Ordner, in denen die Bilder sind, existieren, indem du packages mit diesem Namen erstellst. Dann müssten die mitkopiert werden.
 

Neue Themen


Zurück
Oben