Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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.
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.
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)
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:
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!)
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:
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.
@Sandro95, in dem Zusammenhang sei auch nochmal der Vorteil der Trennung von Logik und UI verwiesen: Du kannst den Spaß vorab testen (s. z. B. Testklasse oben). Dann weißt Du nicht nur, dass und wie es funktioniert, sondern musst im UI nur noch die betreffenden Methoden aufrufen.
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 .
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.
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
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
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
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 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:
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:
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
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.