Informationsbildschirm

  • Hallo zusammen!

    Ich möchte bzw. muss ein Informationsbildschirm erstellen. Dieser muss über eingabe der Tastatur steuerbar sein, also erkennen welcher knopf gedrückt wurde und dann das jeweilige Video abspielen und danach wieder ins Menü zurückkehren.

    Mein Problem: Ich habe ein kleines java Programm geschrieben, welches dann das video per Mplayer abspielt. Leider hängt es sich immer wieder nach ca 30 sekunden auf. Das Video steht und kann dann nur noch das Terminal schliessen. Hat jemand eine Lösung für dieses problem bzw. zufällig schon solch ein fertiges Skript oder Ähnliches??

    Vielen Dank schonmal im Voraus! :)

  • import java.io.File;
    import java.io.*;
    import java.io.FileNotFoundException;
    import java.util.Scanner;


    public class ScannerExample {
    public static void main(String[] args) throws IOException
    {
    Scanner scanner = new Scanner(System.in);

    while (true){
    String s = scanner.next();
    if(s.equals("q")) {

    }
    else
    if(s.equals("w")){
    Process p = Runtime.getRuntime().exec( "mplayer /media/30743BA6743B6DAA/DL_video.wmv" );

    }
    else
    if(s.equals("exit")){ system.out.println("Sie verlassen das Programm");


    }

    }


    }
    }

    Also das programm läuft soweit nur das problem ist halt dass es 30 sek nachdem das video abspielt einfach hängen bleibt :/

  • An dem Code sind mehrere Sachen, die unter "Bad Practise" fallen.

    Zum einen fehlt hinter den beiden else's die öffnende geschweifte Klammer.
    Zum anderen baust du eine Endlosschleife, die in jedem Durchlauf "string S = scanner.next();" ausführt.
    Es ist möglich, dass der scanner irgendwann ins "Leere" läuft und eine Null-Pointer Exception schmeißt.

    Viel mehr kann ich aus dem Code-Snippet Ad-Hoc nicht ersehen.

  • Danke dir bis dahin!

    Ich bin halt noch Neuling was die programmierung angeht, aber die endlosschleife war gewollt :D

    aber auch ohne schleife gehts nicht. Glaubst du es kann auch am Mplayer liegen? Vllt muss man noch irgendein Befehl hinzufügen oder so?

  • Mein Tipp wäre, erstmal generelles Troubleshooting zu betreiben.
    Was passiert, wenn du den MPlayer "händisch" über den Befehl startest? Friert er dann auch ein?
    Danach kannst du dich nach und nach vorantasten. Erst über Java einen Tastendruck einlesen und daraufhin den MPlayer starten. Alternativ anstatt den Player zu starten einfach eine println im Terminal ausgeben lassen.

    Gerade als Neuling hat man mit Allerlei zu kämpfen. Da ist es wichtig, das Problem in kleine Teilaspekte zu brechen um dadurch zu sehen WO es hakt.
    (MPlayer, Endlosschleife, etc.)

  • Das habe ich gemacht, also wenn ich das Video anklicke und öffne läuft es ohne probleme. Wenn ich es in über den Terminal mit dem selben Befehl öffne klappt es auch ohne Probleme. Lediglich wenn ich es aus Java starte hängt es sich nach ca. 30 sek auf...
    Das war anfangs auch der Grund warum ich mich an das Forum gewendet habe.

  • Hallo vatojackson,

    mit

    Code
    Process p = Runtime.getRuntime().exec( "mplayer /media/30743BA6743B6DAA/DL_video.wmv" );

    öffnest Du einen neuen Prozess, der parallel zu Deinem Programm läuft.

    Dein Programm hat eine Endlosschleife, in der keinerlei Verzögerung (delay()) erkennbar ist. Somit wird Dein Programm früher oder später 100% der Prozessorlaufzeit haben wollen.

    Und der Parallelprozess ist mit dem Abspielen des Videos nicht gerade sehr gelangweilt.

    Beides zusammen ist der Grund, weshalb das Video stehen bleibt.

    Du musst innerhalb der Endlosschleife eine Verzögerung aufbauen.

    Du Suchmaschine meines Vertrauens verrät mir das so:

    Code
    Thread.sleep(100);

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hinzu kommt das java nun auch nicht grade der resourcenschonenste Weg ist sowas umzusetzen. Und gewöhn dir die Benutzung absoluter Pfade an.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Hallo dbv,

    JAVA galt wohl als gesetzt.

    Ich hätte das auch mit eioner anderen Programmiersprache gelöst, von der ich weiß, dass eine Endlosschleife praktisch keine Ressourcen frisst (zu einer CPU-Auslastung praktisch nicht beiträgt), so dass der Parallelprozess verballern darf, was er möchte.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Danke für eure antworten!
    Also es muss nicht unbedingt java sein, Andreas, nur hatte es jetzt mal mit Java ausprobiert und es hat halt soweit geklappt, deswegen wollt ich es weiter mit java versuchen.
    Aber wenn du einen anderen Lösungsweg hast bin auf jeden fall offen für deinen Vorschlag!

    Viel Dank für eure Bemühungen, echt Klasse!

    Hallo Andreas,
    mit der Funktion " Thread.sleep(100); " funktionierts leider nicht, bzw. es wurde nicht besser :/

    Edited once, last by vatojackson (May 11, 2015 at 3:59 PM).

  • Hallo votajackson,

    in meiner Lieblingssprache würde Dein Programm so aussehen:

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited once, last by Andreas (May 19, 2015 at 9:01 PM).

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!