# Download und Update einer Java-Anwendung



## faustdonner (12. Apr 2012)

Ich möchte in meinem Spiel einen Patchvorgang ausführen habe aber keine Ahnung wie man Sachen aus dem Internet downloadet. Ich hoffe ihr könnt mir helfen


----------



## Fab1 (12. Apr 2012)

Das heißt, bevor du jetzt erstmal irgendwas in Google eingibst und nach irgendwelchen Stichworten schaust, frägst du einfach mal blind ins Forum.
http://www.java-forum.org/forum-faq-beitraege/7407-man-fragen-richtig-stellt.html


----------



## irgendjemand (13. Apr 2012)

faustdonner hat gesagt.:


> Ich möchte in meinem Spiel einen Patchvorgang ausführen habe aber keine Ahnung wie man Sachen aus dem Internet downloadet. Ich hoffe ihr könnt mir helfen



alleine die frage beinhaltet schon deinen denkfehler ...

auch ist "aus dem netz loaden" nicht ganz so korrekt ... denn es ist lediglich ein datenaustausch wie jeder andere auch ... "download" bezeichnet dabei nur den vorgang den von der quelle kommenden daten-stream in ein file zu speichern ... *upload dementsprechend die umkehrung : ein file über einen daten-stream an einen server senden*

WIE du das ganze umsetzen kannst hängt vor allem von deinem "patcher" ab ...

du kannst entweder normal daten über HTTP laden ... oder dir einen eigenen patch-server basteln ...

näheres dazu würde ich dir dann aber empfehlen im netz-forum zu posten


----------



## L-ectron-X (13. Apr 2012)

Für Java gibt es ein vorgefertigtes System (Java Web Start), welches neben dem Download und der Installation, auch Updates und natürlich den Start der Anwendung durchführt.

Links zum Einlesen: 

Java Web Start ? Wikipedia
Was ist Java Web Start, und wie wird es gestartet?
Einführung in JNLP und Java Web Start


----------



## irgendjemand (13. Apr 2012)

@l-ectron-x
webstart ist vermutlich ne ganz super lösung ... aber wirklich "praktikabel" ist webstart auch nur unter windows mit IE als browser ... denn bei allen anderen konfigurationen greift schon alleine das auto-setup *welches über ActiveX läuft* schon nicht mehr ... führt also im backend zu einem riesen aufwand um alleine mit der website alle möglichen browser/OS kombinationen zu unterstützen ...

auch ist webstart eher als eine art applet-viewer als für richtige applications gedacht ... denn apps innerhalb der webstart VM laufen in der selben sandbox wie applets im browser ... was mit unter zu problemen führen kann und in der regel eine signierung des gesamten codes nötig macht ...

@TO
du siehst : es gibt möglichkeiten ... aber die "frage" ist halt schlecht gestellt um dir genug infos geben zu können


----------



## L-ectron-X (13. Apr 2012)

irgendjemand hat gesagt.:


> aber wirklich "praktikabel" ist webstart auch nur unter windows mit IE als browser ... denn bei allen anderen konfigurationen greift schon alleine das auto-setup *welches über ActiveX läuft* schon nicht mehr ...


Hast du das durch eigene Tests ermittelt, oder irgendwo mal gelesen?
Jedenfalls kannst du getrost dieses (vermutlich veraltete) Wissen aus deinem Gedächtnis streichen.

Ich arbeite schon seit Jahren mit Opera, der weiß gar nicht, was ActiveX ist. Und dennoch startet er meine Webstart-Anwendungen. Genauso wie der Firefox.

Es gibt für die technische Kompatibilität nur eine Bedingung: der Webserver muss die Dateiendung .jnlp verarbeiten können. (das machen die meisten Webserver)
Die jnlp-Datei ist eine Textdatei, die in XML-Form einige Informationen über die Konfiguration, abhängige Bibliotheken und minimalste JRE sowie die Anwendung selbst speichert. Diese Datei wird in einer Webseite als Link angeboten. Der Benutzer läd diese jnlp-Datei herunter und startet (doppelklickt) sie lokal auf seinem System.
Da die Anwendung jedoch aus dem Netz heruntergeladen wurde, untersteht die den Einschränkungen der Sandbox - genau wie ein Applet.



irgendjemand hat gesagt.:


> und in der regel eine signierung des gesamten codes nötig macht ...


Korrekt, und die Anwendung erhält dann auch volle Zugriffsrechte, wenn der Benutzer dem Zertifikat vertraut. Anderenfalls werden potentiell kritische Operationen mit einer AccessControlException "beendet".

Wenn man den Speicherort eines Java-Programms (jar-Datei) und dessen evtl. abhängige Bibliotheken kennt, kann man (nicht nur theoretisch) zu hause, lokal eine jnlp-Datei dazu schreiben, die das Programm herunterläd und startet.


----------



## irgendjemand (13. Apr 2012)

OUCH ... ich denke DU hast nicht verstanden was ICH mit meine post sagen wollte ...


gesetz dem fall das der user KEIN java installiert hat ... muss dies erst installiert werden bevor der client rechner überhaupt in der lage ist webstart auszuführen ... vorher würde der browser selbst mit einem korrekten content-type für .jnlp nur einen DL-dialog öffnen ... da der rechner nicht weis was er mit "application/x-java-jnlp-file (.jnlp)" anfangen soll

nun kommt microsofts ActiveX technologie zum einsatz : ActiveX ist etwas ähnliches wie "add-ons / plug-ins / wie auch immer" in allen anderen browsern ... mit dem unterschied das diese während der "runtime" des IE geladen , installiert und eingebunden werden können ... wo ja leider alle anderen browser erfolgreich dran scheitern ...

nun bietet ActiveX die möglichkeit das sog. JavaSetup-ActiveXControll zu installieren ... was quasi ein dierektes setup von java von der seite aus ermöglicht ... *ist übrigens die selbe vorgehens weise wenn du mit IE auf ne seite gehst in der ein flash eingbunden ist *z.b. YT* ... dann wirst du gleich zum setup aufgefordert *natürlich auch "abbrech-bar"*

in allen anderen browsern muss allerdings in diesem falle VORHER geprüft werden ob der browser überhaupt java bereits unterstützt *wird durch ActiveX ebenfalls geregelt und erfordert daher KEINEN weiteren code* und wenn nicht muss z.b. via JS in einer schleife auf das beenden des setups gewartet werden *so der offiziell vorgeschlagene "weg" von Sun/Oracle ... nachzulesen im Java-Tut* ... und das ist schon ein erheblicher aufwand ... im gegensatz dazu mal schnell einen eignen kleinen updater zu schreiben ist *mit etwas hilfe von erfahrenen programmierern* deutlich einfacher und schneller umgesetzt als sich mit WebStart zu beschäftigen ... das JNLP kennen zu lernen und sich dann noch mit verschiedenen möglichkeiten rumzuschlagen ...

zeigt mir : du hast dich scheinbar noch NIE mit Win/IE und/oder ActiveX und damit auch noch nicht 100% mit WebStart beschäftigt ... sonst wüsstest du das es genau dieses problem gibt ... *für jemanden der seit seinen anfängen nur IE nutzt *aus überzeugung und aus gewissen vorteilen gegenüber anderen browsern* und daher diese hürden kennt würde sich eine EIGENE , pure-java implementierung immer besser machen als sich mit einem haufen unnötigen kram zu beschäftigen um eine simple aufgabe zu lösen ...


WebStart ist eben nun mal *NICHT* das all-heil-wunder-mittel wenn es um sowas wie "up-to-date halten" seiner software handet ...
auch ist die vorhandene SandBox von den meiste NICHT gewünscht ... und manchmal wäre das "produkt" mit diesen einschränkungen auch überhaupt nicht lauffähig ...


also bitte : vorher selber mal ein wenig im sun-tut über das vorgeschlagene nachlesen als es einfach stumpf zu posten ... da es auch "schattenseiten" haben kann von denen du nichts weist *wie sich hier wunderschön gezeigt hat*


----------



## L-ectron-X (13. Apr 2012)

irgendjemand hat gesagt.:
			
		

> gesetz dem fall das der user KEIN java installiert hat ... muss dies erst installiert werden bevor der client rechner überhaupt in der lage ist webstart auszuführen ...


Da gebe ich dir Recht. Habe ich nicht erwähnt. Aber wie viele Rechner haben kein Java installiert?
Der TO möchte einen Patchvorgang starten. Da er in einem Java-Forum gepostet hat, gehe ich davon aus, dass sich sein Anliegen um eine Java-Anwendung dreht.
Ergo: sollte er und die Benutzer seines Programms auch Java installiert haben, und schon greift dein ActiveX-Argument nicht mehr, zumal es sich ausschließlich auf Windows-Systeme beziehen dürfte. :bahnhof:
Sobald eine aktuelle JRE installiert ist, dürfte Webstart kein Problem mehr sein.



> nun kommt microsofts ActiveX technologie zum einsatz : ActiveX ist etwas ähnliches wie "add-ons / plug-ins / wie auch immer" in allen anderen browsern ...
> ...
> wo ja leider alle anderen browser erfolgreich dran scheitern ...


Das muss nicht unbedingt ein Problem des Browsers sein. Ich frage mich, warum die das in Linux nicht hinkriegen... ? :bahnhof: 
Abgesehen davon ist ActiveX unsicher, da dürfte ich dir nichts Neues erzählen. Ein Sandbox-System wie in Java gibts dort nicht.

Du hast recht, ich schere mich nicht um ActiveX und auch nicht um den IE und noch weniger um Windows-Bibliotheken. Weils proprietär und unsicher ist und ungefragt am System des Benutzers rumfrickelt.
Ich programmiere mit Java, weil ich mich ungern auf eine Plattform festlegen möchte.

ActiveX mag vielleicht für den einen oder anderen Sinn machen. Aber ich brauche es in meinem Programmieralltag nicht.



> WebStart ist eben nun mal NICHT das all-heil-wunder-mittel wenn es um sowas wie "up-to-date halten" seiner software handet ...


Das habe ich auch nicht behauptet. Es ist aber eine Möglichkeit. Darum ging es mir.


----------



## tdc (13. Apr 2012)

Ich hatte dieses Problem auch bereits und mein grober Ansatz sah folgendermaßen aus:
Man hat 2 .jar-Dateien, einen "Starter" und das Spiel an sich. Zuerst startet man den Starter, der dann über das normale Java-Netwerk-Zeugs (ja, ich drücke mich wieder sehr professionell aus  ) mit einem Server kommuniziert. Mit diesem gleicht er dann eine, in einer Textdatei abgespeicherten, Versionsnummer ab und falls diese übereinstimmt, startet er die Spiel-Jar. Wenn sie nicht übereinstimmt, lädt er die aktuelle Spiel-Jar vom Server herunter und speichert sie unter einem anderen Namen (z.B. "Spiel_new.jar") neben der existierenden Spiel-jar ab. Die alte .jar löscht er dann, die neue benennt er um und startet sie.

Okay, die Lösung ist ein wenig umständlicher als die Webstart-Lösung, aber mir hat Webstart einfach nicht gefallen und wenn man sich ein wenig in die Netzwerkprogrammierung in Java einarbeitet ist es auch relativ einfach umzusetzen.

[EDIT]So viel zur Grundidee, da du aber schreibst, du wüsstest nicht, wie man Sachen aus dem Internet herunterlädt, solltest du dich im Internet (Google) mal zur Netzwerkprogrammierung in Java einlesen. Ich glaube mir hat damals unter anderem das geholfen. [/EDIT]


----------



## irgendjemand (13. Apr 2012)

[ot]im gegensatz zu zum beispiel FireFox-Plugins sind ActiveX deutlich sicherer ...
begründung : beim FF wird lediglich eine meldung geöffnet ob man Plugin X installieren möchte ...

beim IE wird vorher erstmal eine signatur-prüfung durchgeführt ... ergo : ein ActiveX muss über eine gültige signatur verfügen damit es überhaupt installiert werden kann ... ansonsten wird es *zumindest bei default settings* komplett gesperrt ...
auch gibt der IE deutliche hinweise das es IMMER risikoreich ist ActiveX zu installieren ... so eine meldung fehlt beim FF komplett ...

das größte problem allerdings ist das die meisten user ganz stumpf auf "ja" / "next" / "weiter" klicken ... dafür brauch ich nich mal n plugin oder n activex ... da brauch ich nur n "applet" signieren ... das irgendwo einbinden ... und kann dann auf grund dieser stumpfheit das eh alles zu gelassen wird ... auch damit meine "schad-software" verbreiten ...[/ot]


----------



## Guest2 (14. Apr 2012)

Moin,

ich kann die Argumentation leider nicht ganz nachvollziehen. Es wird damit argumentiert das Webstart versagt, wenn gar kein Java installiert ist. Was auch völlig korrekt ist (außer im IE, da geht es trotzdem). Eure Selbstbau-Updater versagen allerdings doch auch, wenn kein Java installiert ist?!

Dann wird bei ActivX damit argumentiert diese seien sicherer (als FF-Plugins) weil sie signiert sein müssen. Bei Webstart wiederum wird dies als Nachteil angesehen. Ganz davon abgesehen, dass eine Signatur erstmal nichts über die Sicherheit einer Anwendung aussagt, sondern lediglich den Autor ausweist. 

Das Webstart Anwendungen erstmal in einer Sandbox laufen ist korrekt. Für einzelne Dateizugriffe sowie Drucker und Persistenzfunktionen bietet die JNLP API aber auch Funktionen, um aus der Sandbox heraus zu agieren. Alles Weitere muss in der Tat signiert werden. Eine Selbstsignatur ist im Zweifelsfall aber auch nicht schlimmer, als eine Anwendung direkt ohne Sandbox laufen zu lassen.

Daneben bietet Webstart aber auch eine ganze Reihe weiterer Funktionen ohne zusätzlichen Mehraufwand. Angefangen von VM Parametern bis zu Links im Start Menü (und noch viel mehr). Ganz konkret: Eine LWJGL Anwendung per Webstart zu starten ist easy und geht ohne weitere Signatur! Ohne Webstart: Kommandozeile, Batch-Dateien, EXE Warpper, ELF Wrapper usw., das ist doch gruselig?!

Viele Grüße,
Fancy


----------

