tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
273
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Mad0x Mad0x ist offline Grünschnabel
    Registriert seit
    Oct 2011
    Beiträge
    2
    Ich und mein Kollege haben ein grosses Problem. Wir versuchen eine File zu laden (also ein Video) und diese dann mithilfe des ProcessBuilders abzuspielen.
    Der Code sieht bisher so aus:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
     
    import java.io.IOException;
     
     
    class Player {
    InputStream  Video = (getClass().getResourceAsStream("Video/Intro.wmv"));
        public static void main (String[] args) throws IOException {
     
    ProcessBuilder VideoPlayer = new ProcessBuilder("cmd.exe", "/c","Video/Intro.wmv" );
    VideoPlayer.start();
    }

    Das Video wird in Eclipse problemlos abgespielt, aber sobald man das Ganze als .jar-Datei exportiert hat, findet er die Datei nciht mehr. Was machen wir falsch?
    Wie laden wir eine File richtig, dass diese dann mitexportiert wird und gefunden werden kann?

    PS: Eclipse slebst zeigt an, dass die Datei mitexportiert wird.
     

  2. #2
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    Du brauchst dieses Video doch überhaupt nicht zu laden, übergib einfach den Dateipfad dem Systemeigenen Videoplayer. Das funktioniert am besten über
    Code java:
    1
    
    Desktop.getDesktop().openFile()
    , diese Lösung ist auch halbwegs Platformunabhängig.

    Euer 2. Problem ist der Pfad. Dazu gibts hier verschiedene Posts, nutzt doch bitte die Foren-Suche!
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  3. #3
    SE Tutorials.de Gastzugang
    Ich vermute mal ganz stark das dies ein CROSS-Thread aus dem java-forum.org ist der diesem hier vom Wortlaut verdammt änlich ist. *Wenn ichs noch recht im Kopf hab geht es um irgendwelche Naruto-AMV's.*
    Da ich "da drüben" nicht dazwischen reden wollte *weils mir einfach zu stumpf ist* versuch ich dir hier mal dein Problem etwas zu verdeutlichen :
    Du schreibst eine Klasse welche nichts weiter tut als einen externen Prozess mit einem Parameter startet. Dieser Parameter ist ein Dateipfad. Soweit ist das ja alles kein Problem.
    Was du hier aber schon grundlegend falsch machst : du bereitest dich darauf vor eine Resource einzulesen ... was du überhaupt nicht musst. Und dann versuchst du den externen Prozess mit einer abstrakten Pfadangabe zu starten obwohl dieser noch nicht mal einen absoluten Pfad zur Datei hat.

    Was zu tun ist :

    -Datei aus JAR extrahieren ... das ist wichtig damit das System das Video überhaupt finden kann. Es reicht nun mal nicht nur das JAR als ZIP-Archiv anzugeben wenn der Player nicht in der Lage ist eine solche Datei zu lesen und zu verarbeiten.
    -Nutzen der Klasse Desktop ... warum du unbedingt eine Console startest und hoffst das das System die CMD-Erweiterungen aktiviert hat um zu erkennen das ein bestimmter Datentyp mit einer bestimmten Anwendung ausgeführt werden soll ... das ist zu unsicher. Als Beispiel könnte ich einfach diese Erweiterung deaktivieren und die CMD würde mich fragen was sie denn mit dem File tun soll.
    -Sich gedanken über die Sinnhaftigkeit machen ... ganz erlich : ich verstehe immer noch nicht was dieser Unfug soll. Warum packst du ein Video-File mit einer Start-Klasse *die wie gesagt fehlerhaft ist* in ein JAR und hoffst dass "das irgendwie schon hinhaun wird" ? Warum lieferst du nicht einfach das Video-File aus ? Hast du Angst vor irgendwelchen Urheberrechtsverletzungen ? Glaub mir ... die hast du so oder so ... egal wie du ein solches File verbreitest.

    Naja ... vielleicht schaffst du es ja noch mir den Sinn dahinter irgendwann zu erläutern ... aber so wie es jetzt ist ist es einfach nur OVERKILL nach dem Motto : ich tu es weil ich es kann ... anstatt einfach das Video zu verschicken ... aber naja ... mache mal wie du denkst.
     

  4. #4
    Mad0x Mad0x ist offline Grünschnabel
    Registriert seit
    Oct 2011
    Beiträge
    2
    Zitat Zitat von SPiKEe Beitrag anzeigen
    Ich vermute mal ganz stark das dies ein CROSS-Thread aus dem java-forum.org ist der diesem hier vom Wortlaut verdammt änlich ist. *Wenn ichs noch recht im Kopf hab geht es um irgendwelche Naruto-AMV's.*
    Da ich "da drüben" nicht dazwischen reden wollte *weils mir einfach zu stumpf ist* versuch ich dir hier mal dein Problem etwas zu verdeutlichen :
    Du schreibst eine Klasse welche nichts weiter tut als einen externen Prozess mit einem Parameter startet. Dieser Parameter ist ein Dateipfad. Soweit ist das ja alles kein Problem.
    Was du hier aber schon grundlegend falsch machst : du bereitest dich darauf vor eine Resource einzulesen ... was du überhaupt nicht musst. Und dann versuchst du den externen Prozess mit einer abstrakten Pfadangabe zu starten obwohl dieser noch nicht mal einen absoluten Pfad zur Datei hat.

    Was zu tun ist :

    -Datei aus JAR extrahieren ... das ist wichtig damit das System das Video überhaupt finden kann. Es reicht nun mal nicht nur das JAR als ZIP-Archiv anzugeben wenn der Player nicht in der Lage ist eine solche Datei zu lesen und zu verarbeiten.
    -Nutzen der Klasse Desktop ... warum du unbedingt eine Console startest und hoffst das das System die CMD-Erweiterungen aktiviert hat um zu erkennen das ein bestimmter Datentyp mit einer bestimmten Anwendung ausgeführt werden soll ... das ist zu unsicher. Als Beispiel könnte ich einfach diese Erweiterung deaktivieren und die CMD würde mich fragen was sie denn mit dem File tun soll.
    -Sich gedanken über die Sinnhaftigkeit machen ... ganz erlich : ich verstehe immer noch nicht was dieser Unfug soll. Warum packst du ein Video-File mit einer Start-Klasse *die wie gesagt fehlerhaft ist* in ein JAR und hoffst dass "das irgendwie schon hinhaun wird" ? Warum lieferst du nicht einfach das Video-File aus ? Hast du Angst vor irgendwelchen Urheberrechtsverletzungen ? Glaub mir ... die hast du so oder so ... egal wie du ein solches File verbreitest.

    Naja ... vielleicht schaffst du es ja noch mir den Sinn dahinter irgendwann zu erläutern ... aber so wie es jetzt ist ist es einfach nur OVERKILL nach dem Motto : ich tu es weil ich es kann ... anstatt einfach das Video zu verschicken ... aber naja ... mache mal wie du denkst.
    Wir gingen das Problem ähnlich an, wie wir es mit den Bildern getan haben. Dort wird, meines Wissens nach, ein Bild so geladen, sodass es danach auch in einer "Runnable JAR-File" geladen werden kann und nicht nur in der Entwicklungsumgebung selbst. Ich glaube, du meintest, dass das Programm in eine einfache .jar-Datei (also in etwa gleichzusetzten mit einer .zip-Datei, wenn ich dich richtig verstanden habe) exportiert wird. Und um irgendwelche Ängste wegen den Urherberrechtverletzung geht es mir eigentlich gar nicht, da das Programm auch gar nicht für die Verbreitung gedacht ist...

    Zur Sicherheit frage ich nochmal, um Missverständnisse zu vermeiden. Wie erwähnt haben wir das gleiche auch schon mit Bildern gemacht, diese werden dann so geladen:
    Code :
    1
    
    ImageIcon bild2 = new ImageIcon(getClass().getClassLoader().getResource("Bilder/bild.jpg"));
    Das Bild befindet sich nun in dem Ordner "Bilder" in unserem Project: Die Datei wird, innerhalb sowie ausserhalb der Entwicklungsumgebung, gleaden. Mit Videos sollte dies nun ganz ähnlich klappen oder lege ich da schon grundlegend falsch?
     

  5. #5
    SE Tutorials.de Gastzugang
    Erstens : NEIN !
    Ich kenne den Unterschied zwischen einem "JAR" und einem "runnable JAR" ... und zwar ist das lediglich die Zeile "Main-Class" im Manifest ... nicht mehr und nicht weniger ...

    Zweitens : JAIN !
    Du liegst nicht grundlegend damit falsch ein Video so laden zu wollen wie du es mit einem Bild getan hast ... das Problem ist viel mehr die fehlende Verarbeitungsmöglichkeit in Java ... von der Spiecher-Begrenzung mal ganz abgesehen.
    Es gibt in Java keinen dierekt verwendbaren Video-Player dem du einfach so ein File oder InputStream übergibts und dann sowas wie play() aufrufst. Java kann sowas nur mit Audio-Daten ... und auch hier nur mit sehr wenigen Formaten wie .au .wav .snd . Auch müsstest du dafür sorgen das das Jar mit genug Heap gestartet wird ... das heißt mindest die Größe des Videos + die Größe der Player-Lib + ein paar MB für TMP-Daten + den Heap den die VM selbst braucht ... macht also z.B. bei nem 100MB Video und ner sehr kleinen Lib gut schon mal 150MB - 200MB ... je nach dem wie viel die Lib frisst.

    Ich wollte ja noch nicht mal sagen das es komplett unmöglich ist ... nur so wie du es versucht hast geht es nun mal nicht. Davon abgesehen war dein Beispiel was du hier gepostet hast weit von dem entfernt was du eigentlich vor hast ... daher auch unsere falsche Ansicht in punkto CMD.

    Was nun der Sinn dahinter sein soll erschließt sich mir zwar immer noch nicht ... vor allem wenn es nur um EIN File geht ... aber naja ... das muss ich wohl auch nicht verstehen.
     

Ähnliche Themen

  1. X-File laden mit Direct X
    Von Crackmaster im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 11.01.09, 15:36
  2. Antworten: 0
    Letzter Beitrag: 22.11.07, 14:46
  3. ein XML-file in mehrere dyn. Textfelder laden
    Von KleeneNewbie im Forum Flash Plattform
    Antworten: 4
    Letzter Beitrag: 20.06.05, 22:06
  4. Sql File per PHP in Datenbank laden
    Von dreambaser im Forum PHP
    Antworten: 2
    Letzter Beitrag: 08.03.05, 22:42
  5. .max File in C4d laden?
    Von CaptainIglo im Forum Cinema 4D
    Antworten: 5
    Letzter Beitrag: 24.02.04, 17:05