# JDownloader als Vorbild



## Wang (16. Aug 2011)

Hallo allerseits,

mit voranschreitendem Studium macht man sich verstärkt Gedanken über professionelle, in Java geschriebene Programme. 
Mir ist dabei der JDownloader aufgefallen, da der in Java geschrieben ist und ich habe mir schon öfters Gedanken darüber gemacht, wie diverse Funktionen umgesetzt worden sein könnten (um vor allem meinen Entwicklungshorizont zu erweitern)...

Es wäre sehr nett, wenn der ein oder andere fortgeschrittene Java-Entwickler ein paar Worte über meine "Problempunkte" schreiben könnte:

- Obwohl es ein Java-Programm ist, muss man es vor der ersten Anwendung dennoch installieren. Woran liegt das bzw. was hat das für einen Vorteil?
- Nach dem Starten wird nach Updates gesucht. Mit welchen (Java-)Komponenten/Technologien wurde das umgesetzt?
- Klickt man auf "Datei", dann kann man das Programm mit einem Klick neustarten lassen. Ich denke, dass hier ein Script zum Tragen kommt, Genaueres kann ich mir aber nicht vorstellen...?
- Etliche Prozesse laufen ja parallel ab. Hier habe ich Schwierigkeiten, mir konkret das Zusammenspiel GUI-Eingabe und parallele Ausführung vorzustellen. Wie sieht denn die Architektur grob beschrieben aus?

Das sollte es erst mal gewesen sein, denn aus den Antworten dürften sich auch Antworten auf andere Fragen ergeben.

Ich weiß, dass ein Forum immer etwas sehr Unpersönliches ist, ich möchte aber an dieser Stelle anmerken, dass ich sämtlichen Lesern und Verfassern für ihren Einsatz wirklich sehr dankbar bin und mir das Forum mehr vermittelt als die meisten Uni-Dozenten und Übungsleiter!

Vielen Dank und beste Grüße!

Wang


----------



## sol (16. Aug 2011)

Da der Quellcode des JDownloaders verfügbar ist kannst du dort selbst reinschauen


----------



## Marco13 (16. Aug 2011)

Auch wenn ich JDownloader nicht kenne, zumindest der kurze Versuch, etwas hilreicheres zu schreiben:



> - Obwohl es ein Java-Programm ist, muss man es vor der ersten Anwendung dennoch installieren. Woran liegt das bzw. was hat das für einen Vorteil?



Kann verschiedene Gründe haben. Z.B. könnten bestimmte Dateiverknüpfungen erstellt werden so dass bei einem Doppelklick auf die Datei automatisch JDownloader gestartet wird oder so... (nur geraten)



> - Nach dem Starten wird nach Updates gesucht. Mit welchen (Java-)Komponenten/Technologien wurde das umgesetzt?


Im Zweifelsfall mit irgendwas aus Trail: Custom Networking (The Java™ Tutorials)



> - Klickt man auf "Datei", dann kann man das Programm mit einem Klick neustarten lassen. Ich denke, dass hier ein Script zum Tragen kommt, Genaueres kann ich mir aber nicht vorstellen...?


Ich kann mir nicht vorstellen, was dieser "Neustart" genau macht... 



> - Etliche Prozesse laufen ja parallel ab. Hier habe ich Schwierigkeiten, mir konkret das Zusammenspiel GUI-Eingabe und parallele Ausführung vorzustellen. Wie sieht denn die Architektur grob beschrieben aus?



Da kann man nur spekulieren, aber speziell Dinge, die bei Swing im Hintergrund passieren, werden mit dem genacht, was auf Lesson: Concurrency in Swing (The Java™ Tutorials > Creating a GUI With JFC/Swing) beschrieben ist.


----------



## Cola_Colin (16. Aug 2011)

Wang hat gesagt.:


> - Obwohl es ein Java-Programm ist, muss man es vor der ersten Anwendung dennoch installieren. Woran liegt das bzw. was hat das für einen Vorteil?


Das hat nichts damit zu tun, dass es ein Java Programm ist, jede Programmiersprache liefert dir irgendein Kompiliat zurück, was auch ohne einen Installer läuft.
Ein Installationsvorgang ist im Normalfall notwendig, um die ganzen Daten in die richtigen Ordner zu kopieren, etc.



> - Klickt man auf "Datei", dann kann man das Programm mit einem Klick neustarten lassen. Ich denke, dass hier ein Script zum Tragen kommt, Genaueres kann ich mir aber nicht vorstellen...?


Einen Programmneustart kann man recht simpel implementieren, indem man mit einem ProcessBuilder oder mit Runtime.exec() erst das Prog aus dem Prog startet und dann das ursprüngliche Prog beendet.
Also in etwa so:
Runtime.exec(java -jar pfadZurProgrammJar);
System.exit(0);


----------



## Coalado (19. Aug 2011)

*Installation*
Grundsätzlich läuft JD ohne Installer auch. Der Installer kümmert sich aber um Dinge wie

JRE Finden, oder bei Bedarf nachladen installieren
Container Dateiendungen registrieren
Startmenu Einträge
Uninstaller Registrieren ...

Der Installer selbst ist mit Install4j gemacht.

*Updates*
Das Updatesystem ist was komplett eigenes. Wird aber auch demnächst durch ein neues Updatesystem ersetzt.

Einfach gesagt: Neue Daten laden, Alte überschreiben ->Neu starten. Da man nicht immer alles überschreiben kann, läuft der Neustart über ein kleines Extratool.

*Neustart*
Wie schon gesagt, startet JD sich einfach neu indem er sich selber startet, und dann gleich beendet. Oft läuft der neustart auch über eine tbs.jar - z.B. Falls Dateien überschrieben werden müssen.
Beim Neustart müssen Systemabhängig JVM Parameter weitergereicht werden. Das macht das ganze noch etwas aufwendiger. (Aber auch nur etwas)

*Swing und Co.*
Das lässt sich jetzt nicht in wenigen Zeilen abhandeln. Die GUI läuft immer in einem (oder mehreren) eigenen Threads. Diese EventDispatcherThreads sollen möglichst NIE lange Berechnungen durchführen. Das würde sofort zu "Hängern" führen. Wenn eine Anwendung nicht mehr auf Eingaben reagiert, dann hängt vermutlich der GUI Thread.

Am besten fragst du uns selber:
http://jdownloader.org/knowledge/chat   #jdteam channel joinen.

Viele Grüße,
Coalado


----------



## Wang (24. Aug 2011)

Hallo und sorry für die späte Rückmeldung - ich habe seit letztem Mittwoch mit einem üblen Hexenschuss zu kämpfen gehabt (kein Sport während des Semesters und zuviel Sport in den Semesterferien)... :autsch:

Vielen Dank an alle für die hilfreichen Antworten...

... vor allem für den sehr interessanten Link am Ende. 

Gruß
Wang


----------

