Launcher für mein Spiel

Messoras

Aktives Mitglied
Hallo,
Ich bin's mal wieder und ich sitze nach wie vor noch an meinem Spiel 🙂
Da es für die Spieler relativ nervig ist, das Spiel nach jeder Überarbeitung neu runterladen zu müssen, dachte ich mir ich könnte es ja mal mit einem Launcher probieren.
Der Launcher soll im Grunde zwei Sachen können:
Die entsprechenden Spieldateien von einer bestimmten Internetseite herunterladen, diese irgendwo speichern und eine bestimmte von den Dateien aufrufen.
Und da seid ihr gefragt 😀
Ich kenne mich nämlich garnicht mit Netzwerkprogrammierung aus.
Bis jetzt habe ich es geschafft ein Programm zu implementieren, das zwei Knöpfe und ein kleines Textfeld mit Infos hat (die dann auch von der Website kommen sollten).
Der Spielen-Knopf macht noch garnichts und der Patchen-Knopf hat bis jetzt nur eine URL und einen OutputStream definiert.
Wie schaffe ich es jetzt aus der download-URL die entsprechende Datei zu bekommen?

Gruß Messoras
 
Zuletzt bearbeitet:
[Java] Datei downloaden?
Java:
package downloader; 


import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.ProtocolException; 
import java.net.URL; 


public class Downloader { 
        public static void downloadFile(String url_str, OutputStream os) 
            throws IllegalStateException, MalformedURLException, 
            ProtocolException, IOException { 


        URL url = new URL(url_str.replace(" ", "%20")); 


        HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 


        conn.setRequestMethod("GET"); 


        conn.connect(); 


        int responseCode = conn.getResponseCode(); 


        if (responseCode == HttpURLConnection.HTTP_OK) { 


            byte tmp_buffer[] = new byte[4096]; 


            InputStream is = conn.getInputStream(); 


            int n; 


            while ((n = is.read(tmp_buffer)) > 0) { 
                os.write(tmp_buffer, 0, n); 
                os.flush(); 
            } 


        } else { 
            throw new IllegalStateException("HTTP response: " + responseCode); 
        } 
    } 


    public static void main(String[] args) { 
        try { 
            final String url = "http://www.unixboard.de/vb3/images/element/misc/logo_blue.gif"; 


            FileOutputStream fos = new FileOutputStream(System 
                    .getProperty("user.home") 
                    + File.separator + "logo.gif"); 


            downloadFile(url, fos); 


            fos.close(); 
        } catch (Exception e) { 


            e.printStackTrace(); 
        } 
    } 
}
 
Hey Androbin,
Ich habe mal deine Methode ausprobiert.
Klappt super! Jetzt habe ich nurnoch das komische "MALFORMED" Problem 😀
Ich habe das ganze mal so implementiert:
Java:
try {
            final String witzignet = "http://witzigfahren.jimdo.com/app/download/9884796894/Witzigfahren%20(3.1.1).zip?t=1423413097";
            FileOutputStream fos = new FileOutputStream("data/");

            downloadFile(witzignet, fos);
 
            fos.close();
        } catch (Exception ex) {

            ex.printStackTrace();
        }
Jetzt bekomme ich "data" als .zip Datei raus und dadrin ist alles, wie es sich gehört, ich kann es entpacken und habe dann das, was ich haben wollte 🙂
Ich habe mal noch die Entpackungsmethode von tutorials.net reingehauen, dabei bekomme ich zwar fast alles so raus, wie ich es will, aber ich bekomme so eine merkwürdige Fehlermeldung: "java.lang.IllegalArgumentException: MALFORMED"
bei dem Code
Java:
ZipEntry entry = (ZipEntry) entries.nextElement();
in der while-Schleife
und sowohl ein paar Bilder (pgns), als auch die .jar Datei fehlen in der entpackten Datei.
Schonmal vielen Dank für den Teil

Dann fehlt mir nurnoch das aufrufen einer .jar Datei in dem, was ich heruntergeladen habe.

Gruß Messoras
 
Zuletzt bearbeitet:
"malformed" ist Englisch für "deformiert", "missgebildet" oder auch "missgestaltet".
Damit sind die Fehler in der ZIP-Datei gemeint, da sind offensichtlich Fehler bei passiert.

Die JAR-Datei kannst du dann wie jede andere aufrufen, sofern bereits eine existiert, wenn du kompilierst.
Was du dann im Nachhinein an der JAR-Datei änderst ist Java egal, Hauptsache, es hat sie beim kompilieren gesehen.
 
Moin,
Ich habe das ganze mal so implementiert:
Java:
"java.lang.IllegalArgumentException: MALFORMED"
bei dem Code
[code=Java]ZipEntry entry = (ZipEntry) entries.nextElement();
in der while-Schleife
Ich hatte neulich auch so ein Problem!
Im vermute ganz stark, dass es im ZIP-File Dateinamen mit Umlauten gibt!
Das war es bei mir - damit kommt der Zipper nicht klar !!

Gruß Klaus
 
Tatsache, es lag daran, dass ich eins der Bilder "Kästen" statt "Kaesten" genannt habe 🙂
Geändert und schon klappt's.
Danke soweit.

Jetzt alles, was mir noch fehlt:
Der Launcher sollte nicht bei jedem Start die Dateien neu herunterladen, also müsste irgendwie auf einfachem Wege ein schneller Versionsabgleich erfolgen...
Dafür könnte ich vermutlich einen zweiten kleinen Download hinzufügen, der nur die Versionsnummer beinhaltet, aber das geht sicherlich auch einfacher.
Das andere wäre die Sache mit dem Aufrufen der .jar.
Geplant ist, dass so ähnlich wie bei Minecraft z.B. ein Klick auf den Patch Button entweder sagt, dass die Version aktuell ist, oder sie neu runterlädt und ein Klick auf den Spielen Button die .jar mit dem Spiel öffnet... Wie rufe ich aus einem JFrame denn jetzt diese .jar auf? 😀

Gruß Messoras
 
Soo, jetzt habe ich es soweit 🙂
die actionPerformed für den SPielen Knopf sieht jetzt so aus:
Java:
try {
                        ProcessBuilder pb = new ProcessBuilder("java","-jar","data/Witzigfahren_"+version+"/Witzigfahren spielen.jar");
                        pb.start();
                    } catch (Exception ex) {

                        ex.printStackTrace();
                    }
Dafür musste ich die Dateien zwar erst noch ein wenig herumschieben, aber jetzt klappt es 😀
Danke für die schnelle Hilfe Leute!

Gruß Messoras
 

Neue Themen


Zurück
Oben