JavaFx Album

Welche? Was "sagt" diese? Meldung?
Das ist die MEldung wenn ich im target nicht ein bild auswähle ( was eig ja auch kein Sinn macht ein Bild zu kopieren und das dann in ein anderes Bild reinzukopieren ) oder ?


java.nio.file.FileAlreadyExistsException: C:\Users\waf-l\Desktop\A&L Projekt
at sun.nio.fs.WindowsFileCopy.copy(WindowsFileCopy.java:124)
at sun.nio.fs.WindowsFileSystemProvider.copy(WindowsFileSystemProvider.java:278)
at java.nio.file.Files.copy(Files.java:1274)
at main.lambda$null$1(main.java:211)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
 
OK, Du musst den Dateinamen im Zielverzeichnis mit angeben, also nicht nur den Ordner sondern auch den Dateinamen dazupacken.

Und, weil es mir gerade auffällt: warum hast Du den Code im Button? Du brauchst doch nur etwas wie das FileSystemAlbum von oben zu nehmen und deren Methoden im Button aufzurufen - diese Trennung ist ja Sinn und Zweck der Sache.
 
@mihe7 ja das habe ich dann ja aber dan nwar da nur ein neuer Ordner "stern4 " welcher aber komplett leer war . und das gewünschte Bild ist nicht drin

weil das ja durch den Klick auf den Add button passieren soll
 
OK, Du musst den Dateinamen im Zielverzeichnis mit angeben, also nicht nur den Ordner sondern auch den Dateinamen dazupacken.

Und, weil es mir gerade auffällt: warum hast Du den Code im Button? Du brauchst doch nur etwas wie das FileSystemAlbum von oben zu nehmen und deren Methoden im Button aufzurufen - diese Trennung ist ja Sinn und Zweck der Sache.
aber ja das stimm muss ich umändern um die bessere Trennung zu haben un das der code schöner ist
 
ja das habe ich dann ja aber dan nwar da nur ein neuer Ordner "stern4 " welcher aber komplett leer war . und das gewünschte Bild ist nicht drin
?!?

Hier
Java:
Path target = Paths.get("C:\\Users\\waf-l\\Desktop\\A&L Projekt");
gibst Du als Zieldatei einen bereits existierenden Ordner an, daher:
java.nio.file.FileAlreadyExistsException: C:\Users\waf-l\Desktop\A&L Projekt
Sprich, die Datei C:\Users\was-l\Desktop\A&L Projekt existiert bereits.
 
?!?

Hier
Java:
Path target = Paths.get("C:\\Users\\waf-l\\Desktop\\A&L Projekt");
gibst Du als Zieldatei einen bereits existierenden Ordner an, daher:

Sprich, die Datei C:\Users\was-l\Desktop\A&L Projekt existiert bereits.
Muss ich dann immer einen neuen Ordner erstellen ein adden oder wie ?

Ich möchte ja nur best in mate Bilder von einem Ordner in einen anderen reinkopieren @mihe7
 
Nein, Du musst im target den Dateinamen mit angeben.

Wie hier
Java:
            Path oldPath = image.path();
            Path newPath = getRatingDir(newRating).resolve(oldPath.getFileName());
            Files.move(oldPath, newPath);

machst Du halt
Java:
                    Path source = Paths.get(bildpfad.getText());
                    Path target = Paths.get("C:\\Users\\waf-l\\Desktop\\A&L Projekt").resolve(source.getFileName());
                    Files.copy(source, target);
 
Nein, Du musst im target den Dateinamen mit angeben.

Wie hier
Java:
            Path oldPath = image.path();
            Path newPath = getRatingDir(newRating).resolve(oldPath.getFileName());
            Files.move(oldPath, newPath);

machst Du halt
Java:
                    Path source = Paths.get(bildpfad.getText());
                    Path target = Paths.get("C:\\Users\\waf-l\\Desktop\\A&L Projekt").resolve(source.getFileName());
                    Files.copy(source, target);


So , jetzt habe ich das so gemacht und im textfield de pfad des bildes angegeben doch wieder kommt ne Exception



java.nio.file.FileAlreadyExistsException: C:\Users\waf-l\Desktop\A&L Projekt\babe
at sun.nio.fs.WindowsFileCopy.copy(WindowsFileCopy.java:124)
at sun.nio.fs.WindowsFileSystemProvider.copy(WindowsFileSystemProvider.java:278)
at java.nio.file.Files.copy(Files.java:1274)
at main.lambda$null$1(main.java:211)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)




Java:
  b3.setOnAction((ActionEvent event) ->{


                   Path source = Paths.get(bildpfad.getText());
                   Path target = Paths.get("C:\\Users\\waf-l\\Desktop\\A&L Projekt").resolve(source.getFileName());

                   try {
                       Files.copy(source,target);
                   } catch (IOException ex) {
                       ex.printStackTrace();
                   }


               });
 
Falls Du überschreiben willst, kannst Du das entsprechend CopyOptions setzen (StandardCopyOption.REPLACE_EXISTING).

Das würde sogar für leere Verzeichnisse funktionieren.

Und bitte nicht als Vorwurf empfinden: Versuch doch etwas mehr mit der Dokumentation zu arbeiten! Ich habe ja einige Hinweise gegeben...

So hättest Du dem Link folgen können und dann hättest Du die verschiedenen copy Methoden gesehen.
Ich habe die CopyOptions angesprochen - das sind doch Links, also einmal auf das CopyOption geklickt und Du hättest das gesehen. Ok,die ist leer, aber es gibt abgeleitete Klassen - Das findet sich ja alles in der Doku. Also click auf StandardCopyOption.

Die JavaDoc geben in der Regel keine Code-Beispiele. Da wäre aber auch schnell etwas zu finden:

Das liefert ggf. nicht so schöne Beispiele, aber z.B. der erste Treffer ist bei mir:
Da wird dann ein Path per get geholt (ok) aber es wird ein String künstlich zusammen gebaut. Das macht Path.get aber doch, wenn man mehrere Argumente übergibt. Also sowas wie:
Path target = Paths.get(System.getProperty("user.home"), "tmp").resolve(source.getFileName());
oder
Path target = Paths.get(System.getProperty("user.home"), "tmp", source.getFileName().toString());
wäre aus meiner Sicht sauberer. Aber das ist Feinheit. Die Funktionalität ist ja das Wichtige und die bekommt man recht gut zu sehen.

Dieses schnell in die Doku schauen und diese zu verstehen sowie das Navigieren in der Doku sind etwas, das muss man üben Ebenso das suchen mit Google. Daher wirklich die Empfehlung, das etwas mehr zu versuchen und zu machen. (Und das ist der Hintergrund, wieso ich dann so Hinweise auf die Doku gebe!)
 
Gibts denn die Datei?
Nein , im Zielordner gibt es die Datei nicht nur in der Quelle.
Wenn ich das jetzt ausführe mit der Option wie @kneitzel meinte erstellt er mir im Ziel ordner ein ein neuen Ordner namens Babe welcher aber leer ist


Falls Du überschreiben willst, kannst Du das entsprechend CopyOptions setzen (StandardCopyOption.REPLACE_EXISTING).

Das würde sogar für leere Verzeichnisse funktionieren.

Und bitte nicht als Vorwurf empfinden: Versuch doch etwas mehr mit der Dokumentation zu arbeiten! Ich habe ja einige Hinweise gegeben...

So hättest Du dem Link folgen können und dann hättest Du die verschiedenen copy Methoden gesehen.
Ich habe die CopyOptions angesprochen - das sind doch Links, also einmal auf das CopyOption geklickt und Du hättest das gesehen. Ok,die ist leer, aber es gibt abgeleitete Klassen - Das findet sich ja alles in der Doku. Also click auf StandardCopyOption.

Die JavaDoc geben in der Regel keine Code-Beispiele. Da wäre aber auch schnell etwas zu finden:

Das liefert ggf. nicht so schöne Beispiele, aber z.B. der erste Treffer ist bei mir:
Da wird dann ein Path per get geholt (ok) aber es wird ein String künstlich zusammen gebaut. Das macht Path.get aber doch, wenn man mehrere Argumente übergibt. Also sowas wie:
Path target = Paths.get(System.getProperty("user.home"), "tmp").resolve(source.getFileName());
oder
Path target = Paths.get(System.getProperty("user.home"), "tmp", source.getFileName().toString());
wäre aus meiner Sicht sauberer. Aber das ist Feinheit. Die Funktionalität ist ja das Wichtige und die bekommt man recht gut zu sehen.

Dieses schnell in die Doku schauen und diese zu verstehen sowie das Navigieren in der Doku sind etwas, das muss man üben Ebenso das suchen mit Google. Daher wirklich die Empfehlung, das etwas mehr zu versuchen und zu machen. (Und das ist der Hintergrund, wieso ich dann so Hinweise auf die Doku gebe!)

Ich nehme das auf keinen fall als Vorwürf , ich bin dnkbar von euch lernen zu können !
Nur finde ich die Dokumentationen oft etwas schwierig zu verstehen .. aber ja ich veruche es ab jetzt etwas mehr auf jeden fall
 
Dann gib doch mal zur Kontrolle dein source und target aus. Stimmen die Werte?
Mach auf einer Eingabeaufforderung ein dir mit dem Inhalt aus source: wird die Datei angezeigt?

Nicht, dass du da nur ein Verzeichnis angibst und keine Datei. Das Files.copy dient dem kopieren von einer Datei - also keine ganzen Verzeichnisse oder so.
 
Ich bins wieder , leider komme ihc beim Laden nicht weiter ..
Alos ich hab jetzt folgenedes gemacht : Ich serialisiere die Objekte in einer Liste( die Objekte bestehen aus nem String pfad, int String bewertung )
Diese deserialisiere ich , was auch beim ersten Bild aus der Datei klappt .
Pro Scene soll ein Bild mit der Bewertung dargstellt werden , wenn ich dann auf nnext klicke kommt immer ein IndexOutOufBounds , obwohl aber i nder Datei sich 3 Objekte befinden .

Vlt könnt ihr mir helfen ..
 
Zuletzt bearbeitet von einem Moderator:
Dann musst du den genauen Code zeigen (als in Code Tags und nicht als Bildschirmfoto) - von der Stelle, wo der Fehler auftritt aber auch was sonst so dazu gehört (Deserialisierung und wie Du die Daten hältst und so)

Du kannst dem aber doch auch im Debugger sehr leicht selbst auf den Grind gehen: Schau doch an der Stelle, an der die Exception geworfen wird, die vorhandenen Daten im Debugger an. Dann siehst Du, auf welchen Index du zugreifst und ob es den gibt (ja wohl nicht, wenn eine IndexOutOfBoundsException geworfen wird) ... Für uns dürfte das recht schwer sein, da den Überblick zu bekommen. (Hier empfehle ich Dir, dich auch mal etwas mit Clean Code zu beschäftigen - wenn eine Methode nicht ganz auf den Bildschirm passt dann ist das schon ein schlechtes Zeichen. Einrücktiefe von 7 ist auch bedenklich, ... Und gehört natürlich auch zu Clean Code: saubere Trennung von Verantwortlichkeiten und so - hängt beim SOLID Principle mit der Single Responsibility zusammen... Hier also eine größere Trennung zwischen View und Controller bzw. Model. (Nach welchem Pattern man da vorgeht, ist erst einmal egal. Die Namen ändern sich dann halt etwas.)
 
Dann musst du den genauen Code zeigen (als in Code Tags und nicht als Bildschirmfoto) - von der Stelle, wo der Fehler auftritt aber auch was sonst so dazu gehört (Deserialisierung und wie Du die Daten hältst und so)

Du kannst dem aber doch auch im Debugger sehr leicht selbst auf den Grind gehen: Schau doch an der Stelle, an der die Exception geworfen wird, die vorhandenen Daten im Debugger an. Dann siehst Du, auf welchen Index du zugreifst und ob es den gibt (ja wohl nicht, wenn eine IndexOutOfBoundsException geworfen wird) ... Für uns dürfte das recht schwer sein, da den Überblick zu bekommen. (Hier empfehle ich Dir, dich auch mal etwas mit Clean Code zu beschäftigen - wenn eine Methode nicht ganz auf den Bildschirm passt dann ist das schon ein schlechtes Zeichen. Einrücktiefe von 7 ist auch bedenklich, ... Und gehört natürlich auch zu Clean Code: saubere Trennung von Verantwortlichkeiten und so - hängt beim SOLID Principle mit der Single Responsibility zusammen... Hier also eine größere Trennung zwischen View und Controller bzw. Model. (Nach welchem Pattern man da vorgeht, ist erst einmal egal. Die Namen ändern sich dann halt etwas.)
ich hab es versucht mit dem debugger aber verstehe nicht den Fehler , er sagt mir immer das die Size nur 1 ist aber das kann gar nicht sein
Clean code gebe ich dir recht , aber ich möchte erstmal das verdammte Ding zum laufen bekommen 😀 ..
Was soll ich dir schicken , damit du mal grob rüber schauen kannst ? @kneitzel
 
Dann schau doch im Debugger die Datenstruktur an. Du kannst doch sehen, wie viele Elemente in der ArrayList ist. Aber ganz offensichtlich ist das nur ein Element drin, daher musst Du einmal im Detail schauen, wo Du das erstellst / füllst.
 
Also hier sidn die beiden Scenen wo das erste Bild ( was auch klappt ) angezeigt wird und das zweite.



Java:
b7.setOnAction((ActionEvent event3)-> primstage.close());


                   box7.setPadding(new Insets(0,20,15,10));
                   //setze die Ausrichtung nach rechts
                   box7.setAlignment(Pos.BOTTOM_RIGHT);
                   //setze die Innenabstände der Buttons auf10
                   box7.setSpacing(10);

                   box8.setPadding(new Insets(50,0,0,0));
                   box8.setAlignment(Pos.TOP_CENTER);

                   // IDS Setzen
                   box7.setId("box7");
                   b7.setId("button7");
                   b8.setId("button8");


                   pane4.setBottom(box7);
                   pane4.setTop(box8);

                  //FileObjekt.setObjektList(FileObjekt.laden());
                  //ArrayList<FileObjekt> neu = FileObjekt.getObjektList();

                   Label labelBewertung = new Label(leereListe.get(0).toString());

                   labelBewertung.setId("bildBewertung");

                   box7.getChildren().addAll(b7,b8);
                   box8.getChildren().add(labelBewertung);



                   try {
                       FileInputStream input = new FileInputStream(leereListe.get(0).getPfad());
                       Image image = new Image(input);
                       ImageView view = new ImageView(image);
                       view.setId("view1");
                       view.setImage(image);

                       //Dem Bild eine neue Größe setzen (verkleinern)
                       view.setFitHeight(200);
                       view.setFitWidth(300);


                       pane4.setCenter(view);

                   } catch (FileNotFoundException ex) {
                       ex.printStackTrace();
                   }

                   b8.setOnAction((ActionEvent event5)->{

                       BorderPane pane5 = new BorderPane();


                       HBox box9 = new HBox();
                       HBox box10 = new HBox();


                       Button b9 = new Button("CLOSE");
                       Button b10 = new Button("NEXT");



                       b9.setOnAction((ActionEvent event3)-> primstage.close());


                       box9.setPadding(new Insets(0,20,15,10));
                       //setze die Ausrichtung nach rechts
                       box9.setAlignment(Pos.BOTTOM_RIGHT);
                       //setze die Innenabstände der Buttons auf10
                       box9.setSpacing(10);

                       box10.setPadding(new Insets(50,0,0,0));
                       box10.setAlignment(Pos.TOP_CENTER);

                       // IDS Setzen
                       box9.setId("box9");
                       b9.setId("button9");
                       b10.setId("button10");


                       pane5.setBottom(box9);
                       pane5.setTop(box10);

                      // FileObjekt.setObjektList(FileObjekt.laden());
                       //ArrayList<FileObjekt> neu2 = FileObjekt.getObjektList();


                        // hier passiert der Fehler
                       Label labelBewertung1 = new Label(leereListe.get(1).toString());



                       box9.getChildren().addAll(b9,b10);
                       box10.getChildren().add(labelBewertung1);



                       try {
                           FileInputStream input = new FileInputStream(leereListe.get(1).getPfad());
                           Image image = new Image(input);
                           ImageView view = new ImageView(image);
                           view.setId("view2");
                           view.setImage(image);

                           //Dem Bild eine neue Größe setzen (verkleinern)
                           view.setFitHeight(200);
                           view.setFitWidth(300);


                           pane5.setCenter(view);

                       } catch (FileNotFoundException ex) {
                           ex.printStackTrace();
                       }



                   });

Die Datei welche ich am Anfang des Programm lade ist diese : Hier befinden sich wie man sieht mehre Objekte drin. @kneitzel , @Mart 1636836248900.png
 
Diese Ausschnitte geben uns keine Informationen, denen wir irgendwas hilfreiches entnehmen können.

Du musst schauen, was Du wo mit dieser ArrayList machst. Wenn da mal mehrere Objekte drin sind und dann nur noch eins, dann wirst du ja in der Zwischenzeit irgendwas gemacht haben.

Und da erkennst Du auch ein Problem mit all diesem Kuddelmuddel: Du hast nichts gekapselt, überall kann (und wird teilweise) darauf zugegriffen. Dann hast Du keine klare Aufteilung, das heisst an jeder Stelle kann Dein Code alles machen. Es gibt also keinen Verlass darauf, dass eine Stelle wirklich nur das macht, was auch ihre Benennung (z.B. durch Methodennamen und so) aussagt. Das macht eine Fehlersuche extrem schwer.
 
Ich denke, er meint das für Deine Datei, aber so wie die aussah wirst Du Die bereits per ObjectInputStream einlesen. Und für das Lesen der Bilder ist das natürlich nicht sinnvoll.
 
ja die implementierung ist sehr verschachtelt und als außenstehender schwer zu verstehen .. daran muss ich noch arbeiten ..Suche seit tagen den Fehler aber werde einfach nicht fündig
 
Ich denke, er meint das für Deine Datei, aber so wie die aussah wirst Du Die bereits per ObjectInputStream einlesen. Und für das Lesen der Bilder ist das natürlich nicht sinnvoll.
Könnte ich vlt die ZIP Datei exportieren und dir schicken ? Dann könntest du wen ndu mal kurz zeit hast( muss nicht heute seim) drüber schauen ? wäre dir mga dankbar.. @kneitzel
 
Zuletzt bearbeitet:
ja, kannst du mir gerne mal zusenden. Evtl. komme ich morgen dazu, mir das mal anzusehen. Aber ich bin derzeit relativ mit einem anderen Thema (Amateurfunk) ausgelastet. Aber schauen wir mal. Senden kannst Du es z.B. an konrad@kneitzel.de (Am besten nicht als Anhang sondern über einen Download Link / teilen über google drive oder so)
 
ich kann dir das ja auch hier einfach per direkt Nachricht schicken , oder ? @kneitzel und ein danke an euch beiden !
Schicke es dir bzw euch dann gleich mal , und klar mach dir kein Stress vlt findest du bzw ihr ja mal kurz zeit um drüber zu schauen @Mart @kneitzel
 
Java:
        try(FileOutputStream out = new FileOutputStream(file2,true); ObjectOutputStream obOut = new ObjectOutputStream(out)){
            obOut.writeObject(Main.leereListe);
            System.out.println("Datei wurde erfolgreich geladen");

        }
also ich denke dein problem ist dass du im moment gar nicht mehr selber weist was passiert im code.. ich möchte nicht böse klingen

du hast 4 zip dateien und in diesen zip dateien sind auch nochmal zip dateien .. es ist besser wie ostern

ich hab das ding entpackt und die 3 Klassen die du hast mal angesehen

dein problem ist folgender maßen:
du hast den Spaghetti Code erzeugt dass du durch static selber nicht mehr weißt was leereliste ist, beim speichern kann man davon ausgehen dass es im richtigen Zustand sein" könnte "aber in welchem Zustand es beim Laden ist ist fraglich
der Code ist in dem aktuellen Stand nicht lesbar
die Fehlersuche dauert nur solange weil du dich selber nicht mehr auskennst wegen dem static
zusätzlich hast du in der Objekt orientierten Sprache 2 Objekte erzeugt in der Summe die zur Umsetzung des albums benutzt werden, der Rest ist static oder fx


in dem aktuellen Stand wird das helfen schwer weils niemand lesen kann
 
Java:
        try(FileOutputStream out = new FileOutputStream(file2,true); ObjectOutputStream obOut = new ObjectOutputStream(out)){
            obOut.writeObject(Main.leereListe);
            System.out.println("Datei wurde erfolgreich geladen");

        }
also ich denke dein problem ist dass du im moment gar nicht mehr selber weist was passiert im code.. ich möchte nicht böse klingen

du hast 4 zip dateien und in diesen zip dateien sind auch nochmal zip dateien .. es ist besser wie ostern

ich hab das ding entpackt und die 3 Klassen die du hast mal angesehen

dein problem ist folgender maßen:
du hast den Spaghetti Code erzeugt dass du durch static selber nicht mehr weißt was leereliste ist, beim speichern kann man davon ausgehen dass es im richtigen Zustand sein" könnte "aber in welchem Zustand es beim Laden ist ist fraglich
der Code ist in dem aktuellen Stand nicht lesbar
die Fehlersuche dauert nur solange weil du dich selber nicht mehr auskennst wegen dem static
zusätzlich hast du in der Objekt orientierten Sprache 2 Objekte erzeugt in der Summe die zur Umsetzung des albums benutzt werden, der Rest ist static oder fx


in dem aktuellen Stand wird das helfen schwer weils niemand lesen kann
Also ist jeder Versuch hoffnungslos zu helfen ?
@Mart
 
Warte es erst Mal ab. Wenn ich nachher des ansehe, dann werde ich auch Refactorings machen.

Was ich schon gesehen habe: Du willst Dir git ansehen 🙂
 
Also je länger ich drauf schaue, desto gruseliger wird es 🙂

Ein Refactoring ist da sehr schwer, da ich da auch wenig ausprobieren kann auf meinem System und es sonst ja keinerlei Tests gibt....

Du nutzt Java 1.8? Ist das gesetzt oder kann man auf eine aktuelle Version gehen? Ist eher nebensächlich, aber ich würde da halt auch auch eher ein Maven Projekt draus machen oder so. (Liegt jetzt einfach nur daran, dass ich so kein JavaFX auf meinem Rechner habe und das über eine Abhängigkeit laden möchte. Für Dich wäre dies ein Punkt, der absolut nebensächlich ist.)

Aber zu Deinem Code:
- Achte auf Code Formatierungen. Mengen an Leerzeilen sind unnötig. Kommentare im Code sind - außerhalb von JavaDoc - unnötig und wenn nicht unnötig zu 99% Zeichen, dass Du Bezeichner umbenennen solltest. Dann waren die Dateien nicht alle richtig eingerückt meine ich. Hier gibt es aber gute Plugins zur Code Formatierung. ==> Ctrl-Alt-Shift-L drücken - da kannst Du dann auch Haken setzen bei optimize imports und so -> Schon ist das Code deutlich besser 🙂

- Lambdas mit { ... } => Taugt nur, wenn Du von Anderen beschimpft, bespuckt oder geschlagen werden willst. Hier das, was in den Klammern ist in eine Methode packen und dann bitte die Methode im Labda aufrufen. So hat der Code dann auch direkt eine kleine Dokumentation in Form des Namens der Methode ... (==> Das ist ein Trick, wie man auf Komemntare im Code verzichten kann:

Java:
// Hier mache ich was tolle
// ...
// ...
Java:
   macheWasTolles();



private void macheWasTolles() {
    // ...
    // ...
}

Der Code selbst hat jetzt den Kommentra drüber (steht ja in der Methoden Signatur) und im laufenden Code hast Du jetzt sozusagen nur noch den "Kommentar", der zu einem Methodenaufruf wurde.


- Dann Trennung von Ebenen: Du hast eine Oberfläche. Und dann hast Du Objekte, mit denen Du arbeitest, also z.B. Deine Bewertungen. Da wird nichts vermischt. Es kann also nicht sein, dass Dein Model FileSystemImageAlbum dann plötzlich UI Controls hat.

- Positiv: Try with Resources! Super! Das ist etwas Positives! Da ganz kleines Mimimi von mir: Wenn Du da mehrere Dinge drinnen hast, dann packe diese auf getrennte Zeilen, also einfach nach dem ; noch einen Zeilenumbruch einfügen. Oder alternativ: Du kannst Die Konstruktoren verschachteln new ObjectInputStream(new FileInputStream(...))


Aber an der Stelle laufe ich dann noch in gewisse Verständnisprobleme hinein, da ich Dein Daten-Modell nicht verstehe. Du hast Bewertung als String, aber es dürfen dann nur "1" - "5" vorkommen? Das nur als ein Punkt, der halt aufschlägt, der an für sich unkritisch ist, aber der halt zu leichten Irritationen führt. Und so kleine Punkte kommen an mehreren Stellen und alle zusammen machen es schwer, alles nach zu vollziehen.

Die Frage ist da jetzt auch, wie man da überhaupt mit umgeht. Ich sehe es gerade nicht als zielführend an, hier den bestehenden Code anzupassen.
Ich würde da lieber neu Anfangen - zumal da ja auch noch nicht so viel an Code ist.

Kannst Du mir evtl. etwas Hintergrundwissen zu Deinem Projekt geben? Ist das einfach nur ein privates Projekt? Etwas für Schule / Uni, das Du abgeben willst (und wo Du ggf. auch Dinge aus dem Lehrplan befolgen musst, spezielle Wünsche des Verantwortlichen erfüllen musst, wo fremde Leistungen als Deine ausgeben als Betrug gewertet werden würde ...) - Eine solche Einordnung wäre wichtig, da davon ggf. weitere Fragen und das weitere Vorgehen abhängen würden.
Bei einem rein privaten Projekt kann ich Dir eher Code hier geben, den du 1:1 übernimmst - niemand wird danach suchen und dir dann Betrug vorwerfen. Vereinfacht einiges, denn bei letzterem müssen wir Dich maximal mit der Nase drauf stoßen, so dass es dann von Dir gekommen ist.
Bei Lehrplänen müsste man wissen, was Dir vermittelt wurde. Beispiel: Wenn da ein Lehrer meint, dass in In Code Kommentare ein Muss sind und ich schimpfe mit dir, dann ist das kontraproduktiv.
Ohne Lehrpläne kann man dann auch deutlich mehr mit einbauen - dann wird es z.B. ein Maven Projekt mit Unit Tests und so. Da würde man Dich dann schnell in sowas etwas einweisen.

(Du merkst - der Gedanke ist, Dich hier ggf. einfach etwas mehr an die Hand zu nehmen und zu führen...)
 
Also je länger ich drauf schaue, desto gruseliger wird es 🙂

Ein Refactoring ist da sehr schwer, da ich da auch wenig ausprobieren kann auf meinem System und es sonst ja keinerlei Tests gibt....

Du nutzt Java 1.8? Ist das gesetzt oder kann man auf eine aktuelle Version gehen? Ist eher nebensächlich, aber ich würde da halt auch auch eher ein Maven Projekt draus machen oder so. (Liegt jetzt einfach nur daran, dass ich so kein JavaFX auf meinem Rechner habe und das über eine Abhängigkeit laden möchte. Für Dich wäre dies ein Punkt, der absolut nebensächlich ist.)

Aber zu Deinem Code:
- Achte auf Code Formatierungen. Mengen an Leerzeilen sind unnötig. Kommentare im Code sind - außerhalb von JavaDoc - unnötig und wenn nicht unnötig zu 99% Zeichen, dass Du Bezeichner umbenennen solltest. Dann waren die Dateien nicht alle richtig eingerückt meine ich. Hier gibt es aber gute Plugins zur Code Formatierung. ==> Ctrl-Alt-Shift-L drücken - da kannst Du dann auch Haken setzen bei optimize imports und so -> Schon ist das Code deutlich besser 🙂

- Lambdas mit { ... } => Taugt nur, wenn Du von Anderen beschimpft, bespuckt oder geschlagen werden willst. Hier das, was in den Klammern ist in eine Methode packen und dann bitte die Methode im Labda aufrufen. So hat der Code dann auch direkt eine kleine Dokumentation in Form des Namens der Methode ... (==> Das ist ein Trick, wie man auf Komemntare im Code verzichten kann:

Java:
// Hier mache ich was tolle
// ...
// ...
Java:
   macheWasTolles();



private void macheWasTolles() {
    // ...
    // ...
}

Der Code selbst hat jetzt den Kommentra drüber (steht ja in der Methoden Signatur) und im laufenden Code hast Du jetzt sozusagen nur noch den "Kommentar", der zu einem Methodenaufruf wurde.


- Dann Trennung von Ebenen: Du hast eine Oberfläche. Und dann hast Du Objekte, mit denen Du arbeitest, also z.B. Deine Bewertungen. Da wird nichts vermischt. Es kann also nicht sein, dass Dein Model FileSystemImageAlbum dann plötzlich UI Controls hat.

- Positiv: Try with Resources! Super! Das ist etwas Positives! Da ganz kleines Mimimi von mir: Wenn Du da mehrere Dinge drinnen hast, dann packe diese auf getrennte Zeilen, also einfach nach dem ; noch einen Zeilenumbruch einfügen. Oder alternativ: Du kannst Die Konstruktoren verschachteln new ObjectInputStream(new FileInputStream(...))


Aber an der Stelle laufe ich dann noch in gewisse Verständnisprobleme hinein, da ich Dein Daten-Modell nicht verstehe. Du hast Bewertung als String, aber es dürfen dann nur "1" - "5" vorkommen? Das nur als ein Punkt, der halt aufschlägt, der an für sich unkritisch ist, aber der halt zu leichten Irritationen führt. Und so kleine Punkte kommen an mehreren Stellen und alle zusammen machen es schwer, alles nach zu vollziehen.

Die Frage ist da jetzt auch, wie man da überhaupt mit umgeht. Ich sehe es gerade nicht als zielführend an, hier den bestehenden Code anzupassen.
Ich würde da lieber neu Anfangen - zumal da ja auch noch nicht so viel an Code ist.

Kannst Du mir evtl. etwas Hintergrundwissen zu Deinem Projekt geben? Ist das einfach nur ein privates Projekt? Etwas für Schule / Uni, das Du abgeben willst (und wo Du ggf. auch Dinge aus dem Lehrplan befolgen musst, spezielle Wünsche des Verantwortlichen erfüllen musst, wo fremde Leistungen als Deine ausgeben als Betrug gewertet werden würde ...) - Eine solche Einordnung wäre wichtig, da davon ggf. weitere Fragen und das weitere Vorgehen abhängen würden.
Bei einem rein privaten Projekt kann ich Dir eher Code hier geben, den du 1:1 übernimmst - niemand wird danach suchen und dir dann Betrug vorwerfen. Vereinfacht einiges, denn bei letzterem müssen wir Dich maximal mit der Nase drauf stoßen, so dass es dann von Dir gekommen ist.
Bei Lehrplänen müsste man wissen, was Dir vermittelt wurde. Beispiel: Wenn da ein Lehrer meint, dass in In Code Kommentare ein Muss sind und ich schimpfe mit dir, dann ist das kontraproduktiv.
Ohne Lehrpläne kann man dann auch deutlich mehr mit einbauen - dann wird es z.B. ein Maven Projekt mit Unit Tests und so. Da würde man Dich dann schnell in sowas etwas einweisen.

(Du merkst - der Gedanke ist, Dich hier ggf. einfach etwas mehr an die Hand zu nehmen und zu führen...)


Erst einmal danke das du dir so viel Mühe gibst um mir zu helfen ,das weiß ich wirklich zu schätzen !!

Also .. das ganze ist ein Hobbyprojekt , hat keien Richtlinien oder sonst was deswegen kannst du mic gerne mehr an die Hand nehmen.Gibt nichts besseres, als von den besteb zu lernen 🙂
Ich hatte gelernt , dass Lambdas sinnvoll sind , sollte ich lambdas am besten umgehen ?
Java 1.8 habe ich drauf , weil ich dort am besten mit JavaFx klar komme

Die FileSystemAlbum klasse ist unnötig , muss noch gelöscht werden. Ich mache alles pber die FileObjekt Klasse.
Mit Clean code werde ich mich ab heute bzw gestern mehr befassen .. das ist wahr ist grausam bei mir 😀 ..
 
Ok, dann schaue ich mal, was ich da vorbereiten kann. Ich muss mir da noch paar Gedanken machen und auch ein paar Dinge vorbereiten.

Grobe Vorstellung:
- Erste Grundlagen zu git werden notwendig sein. Hast Du schon einen Account bei github, gitlab, Microsofts Azure Zeug unter visualstudio.com, ....? Ansonsten leg mal bei github einen Account an und da dann ein Repository. Bei dem Repository gehst Du dann in Settings > Manage Access und fügst mich (kneitzel) dann einfach mal dazu.
- Du bekommst einen Rahmen an die Hand, der auf Java 17 und Maven aufsetzen wird und den ich kurz erläutern werde. Das ist ein Rahmen, den man aber in erster Linie so nutzen kann ohne alles bis ins Detail zu verstehen. Bei Problemen / Anpassungen kann hier zur Not immer schnell jemand helfen und unterstützen.
- Es wird einen kurzen Überblick zu Unit Tests geben - die sind da halt auch schon direkt mit drin. Da geht es nicht gleich um Test Driven Development (TDD), sondern nur um eine kleine Möglichkeit, wie Du dann Dinge austesten kannst. (Halt etwas, das derzeit deinen Code zumüllt. Du probierst was aus und das wird dann auskommentiert oder so)
- Nach diesen ersten Schritten geht es dann mit dem Coding los. Und da bauen wir dann mal gemeinsam den Code auf. Wenn wir soweit sind, dann machen wir einen Termin für eine Google Meet Session aus und dann gehen wir das strukturiert an (Und erläutern zuerst noch die ersten Punkte).
 
Das hört sich sehr gut am , hab mir jetzt einen Account bei Gitlab erstellt schaue mri das eben mit der Repository an und füge dich dann nachher hinzu . Muss ich dafür erst ein Projekt bei Gitlab erstellen ?

Der Ablauf gefällt mir sehr gut , mach dir aber kein Stress wir haben aller Zeit der welt danke noch mal !
Setzen wir dann also den Code von vorne neu auf ? @kneitzel
Ok, dann schaue ich mal, was ich da vorbereiten kann. Ich muss mir da noch paar Gedanken machen und auch ein paar Dinge vorbereiten.

Grobe Vorstellung:
- Erste Grundlagen zu git werden notwendig sein. Hast Du schon einen Account bei github, gitlab, Microsofts Azure Zeug unter visualstudio.com, ....? Ansonsten leg mal bei github einen Account an und da dann ein Repository. Bei dem Repository gehst Du dann in Settings > Manage Access und fügst mich (kneitzel) dann einfach mal dazu.
- Du bekommst einen Rahmen an die Hand, der auf Java 17 und Maven aufsetzen wird und den ich kurz erläutern werde. Das ist ein Rahmen, den man aber in erster Linie so nutzen kann ohne alles bis ins Detail zu verstehen. Bei Problemen / Anpassungen kann hier zur Not immer schnell jemand helfen und unterstützen.
- Es wird einen kurzen Überblick zu Unit Tests geben - die sind da halt auch schon direkt mit drin. Da geht es nicht gleich um Test Driven Development (TDD), sondern nur um eine kleine Möglichkeit, wie Du dann Dinge austesten kannst. (Halt etwas, das derzeit deinen Code zumüllt. Du probierst was aus und das wird dann auskommentiert oder so)
- Nach diesen ersten Schritten geht es dann mit dem Coding los. Und da bauen wir dann mal gemeinsam den Code auf. Wenn wir soweit sind, dann machen wir einen Termin für eine Google Meet Session aus und dann gehen wir das strukturiert an (Und erläutern zuerst noch die ersten Punkte).
 
hast du vlt Discord , sonst könnte man aucch darüber kommunizieren (Falls du das möchtest)
Hab jetzt ein Projekt bei Gitlab erstellt und ne Reposentory , müsstest jetzt eine Einladung bekommen haben
@kneitzel
 
Zuletzt bearbeitet:
Also Discord habe ich zwar auch, aber für sowas taugt es schlicht nichts. Oder willst Du meinen Bildschirm (FHD) mit 720p sehen? Schriften und so wirst Du da kaum lesen / erkennen können 🙂

Und die Abos sind auch sowas von unnötig. Vor allem auch lachhaft! 100MB Dateien kann man dann hochladen. Echt? Das man als Privatperson kein Abos hat, wie diese Firmen haben, ist ja klar, aber es gibt genug andere Tools ohne solche Einschränkungen. Ich habe privat die GSuite daher der Vorschlag mit Google Meet aber ich bin da offen - es sollte nur eben etwas taugen. In der Regel kann man sich bei den vernünftigen Tools auch einfach per Webbrowser anmelden und es nutzen - ohne groß Software zu installieren.
 
Also Discord habe ich zwar auch, aber für sowas taugt es schlicht nichts. Oder willst Du meinen Bildschirm (FHD) mit 720p sehen? Schriften und so wirst Du da kaum lesen / erkennen können 🙂

Und die Abos sind auch sowas von unnötig. Vor allem auch lachhaft! 100MB Dateien kann man dann hochladen. Echt? Das man als Privatperson kein Abos hat, wie diese Firmen haben, ist ja klar, aber es gibt genug andere Tools ohne solche Einschränkungen. Ich habe privat die GSuite daher der Vorschlag mit Google Meet aber ich bin da offen - es sollte nur eben etwas taugen. In der Regel kann man sich bei den vernünftigen Tools auch einfach per Webbrowser anmelden und es nutzen - ohne groß Software zu installieren.
Haha ja okay verstehe , verständlich.
Hast du dir Einladung jetzt bekommen, @kneitzel ?
 

Zurück
Oben