Threads Runtime und Process Probleme

Diskutiere Runtime und Process Probleme im Allgemeine Java-Themen Forum; Hallo, bin neu in diesen Forum darum nicht gleich schlage wenn ich im falschen Forum gepostet habe oder nicht in der lage war die such richtig zu...

  1. kosa
    kosa Neues Mitglied
    Hallo,

    bin neu in diesen Forum darum nicht gleich schlage wenn ich im falschen Forum gepostet habe oder nicht in der lage war die such richtig zu nutzen;)

    ich hab ein kleine Problem und zwar hab ich ein Programm in den ich mehrere Prozesse und Runtime erzeuge ganz simple nach folgenden muster:


    .
    .
    .
    p = r.exec("cmd /c " + command);
    p.waitFor();
    .
    .
    .

    command beinhaltet meistens ein FFMPEG Aufruf mit allen dazugehörigen Parametern. Das klappt soweit auch alles ganz gut. Nun zu mein Problem:


    Ich erzeuge halt nach und nach durch das obige Muster eine neue Videodatei (beispielsweise: rohmaterial.mp4) Sobald ich aber nun einen neuen Prozess starte in dem FFMPEG auf die erstellte Datei zugreifen soll bleibt es hängen.


    Ich persönlich glaube dass die Datei noch irgend wie gespart ist und das Programm deshalb hängen bleibt. Kann das sein? Wenn ja wie kann ich diese sperre aufheben? Bzw. ist meine Vermutung völlig falsch?


    Hier noch ein bisschen mehr code:


    private void sound_video_zusammenfuegen (String pfad_Sound, String pfad_Video, String pfad_ffmpeg, String pfad_Ziel_Video) {
    String command;
    Runtime r = Runtime.getRuntime();
    Process p;
    String ret;

    command = pfad_ffmpeg + " -i " + pfad_Video + " -i " + pfad_Sound + " -vcodec copy " + pfad_Ziel_Video ;
    try {
    p = r.exec("cmd /c " + command);
    p.waitFor();
    } catch(Exception e) {
    System.out.println("norp");
    }
    }


    Ich ruf in der main methode eigentlich sound_video_zusammenfuegen auf und möchte danach eine andere Methode aufrufen welche wiederum auf das erstellte Video String pfad_Ziel_Video String pfad_Ziel_Video zugreifen soll und dort hängt sich mein Programm auf.
    Ich hoffe ich konnte mein Problem beschreiben und mir kann jemand ein Denkanstoß geben. Wie immer vielen dank für jegliche Hilfe.
     
  2. Vielleicht hilft dir das kostenlose Training weiter --> (hier klicken)
  3. Thallius
    Thallius Bekanntes Mitglied
  4. kosa
    kosa Neues Mitglied
    So... ich glaub ich habe mein problem falsch geschildert. Darum versuche ich es noch mal neu:
    Ich hab mein Java Programm in der es folgende Methode gibt (Button wird Betätigt):

    Code (Java):
    private void MyButtonActionPerformed(java.awt.event.ActionEvent evt) {
       // TODO add your handling code here:
       // Welcher schnitt wurde gewählt
       switch (auftrag.videotyp) { // 1 -> Highlightschnitt 2 -> Zusammenfassung 3 -> Torschnitt 4 -> Ganze Spiel
         case 1:
           // code
           break;
         case 2:
           // code
           break;
         case 3:
           // code
           break;
         case 4:
           // rohVideo[1] = speicherpfad + "/Rohmaterial/KameraMZuschnittOhneSound.mp4";
           // video_schneiden (auftrag.kamera[1], auftrag.pfad_ffmpeg, rohVideo[1], auftrag.kameravorlauf[1],String.valueOf(Integer.parseInt(rohvideolaenge[1]) - Integer.parseInt(auftrag.kameranachlauf[1])));
           // rohvideolaenge[1].substring(0,rohvideolaenge[1].indexOf('.'));
           String zs1 = videolaenge_ermitteln (rohVideoSound[1],auftrag.pfad_ffprobe);
           zs1 = zs1.substring(0, zs1.indexOf('.'));
           
           int beginnzweitehalbzeit = (Integer.parseInt(auftrag.LaengeHalbzeit) + Integer.parseInt(auftrag.PauseLaenge));
           int dauerzweitehalbzeit = Integer.parseInt(zs1) - beginnzweitehalbzeit;
           
           String[] zs = new String[2];
           zs[0] = speicherpfad + "/Schnitt/GanzeSpielEineKameraErsteHalbzeit.mp4";
           zs[1] = speicherpfad + "/Schnitt/GanzeSpielEineKameraZweiteHalbzeit.mp4";
           
           video_schneiden (rohVideoSound[1], auftrag.pfad_ffmpeg, zs[0], "0", auftrag.LaengeHalbzeit);
           video_schneiden (rohVideoSound[1], auftrag.pfad_ffmpeg, zs[1], Integer.toString(beginnzweitehalbzeit) , Integer.toString(dauerzweitehalbzeit));
           video_zusammenfuegen (zs, auftrag.pfad_ffmpeg, speicherpfad + "/End-Video/GanzeSpielEineKamera.mp4");
           
           split_screen (rohVideoSound[1], rohVideoSound[1], "" , auftrag.pfad_ffmpeg, speicherpfad + "/End-Video/split.mp4");
           
           if (auftrag.kameraanzahl == 4) {
             // code
           }
           break;
       }
    }

    Und nun kommt das Problem... Bei der Methode split_screen:



    Code (Java):
    private void split_screen (String pfad_Video_1, String pfad_Video_2, String pfad_Video_3, String pfad_ffmpeg, String pfad_Ziel_video) {
       String command;
       Runtime r = Runtime.getRuntime();
       Process p;

       // ffmpeg -i input0 -i input1 -filter_complex vstack output
       command = pfad_ffmpeg + " -i " + pfad_Video_1 + " -i " + pfad_Video_2 + " -filter_complex vstack " + pfad_Ziel_video;

       try {
         p = r.exec("cmd /c " + command);
         //p.waitFor();
       } catch(Exception e) {
         System.out.println("norp");
       }
    }


    Was soll nun eigentlich passieren:

    Wenn der Button betätigt wurde finden ein prüfung statt was eigentlich gemacht werden soll und anhand dessen werden verschieden Methoden ausgeführt (Switch, private void MyButtonActionPerformed)


    Wenn die Auswahl 4 getroffen wurde soll die Methode split_screen aufgerufen werden welche übber FFMPEG die übergebenen Videopfade zu einen splitscreen zusammenfügen.


    Das Problem ist die Methode split_screen:

    Die Ausgangsdatei wird erstellt und ist 1kb groß... Dabei bleibt es aber auch, der Prozess wird nicht weiter ausgeführt... erst wenn ich die Java Anwendung beende startet mein Rechner durch und ffmpeg arbeitet in Hintergrund und erstellt die komplette Datei.

    Was muss ich tun oder abändern dass FFMPEG weiterarbeitet und nicht erst los legt wenn ich die ganze Anwendung beende?
     
    Zuletzt von einem Moderator bearbeitet: 12. Dez. 2016
  5. kosa
    kosa Neues Mitglied
  6. Schau dir jetzt hier den Kurs an und lerne Java zu programmieren: --> Hier klicken, um mehr zu erfahren (Klick)
Die Seite wird geladen...

Runtime und Process Probleme - Ähnliche Themen

Command funktioniert in Kommandzeile aber nicht mit ProcessBuilder bzw. Runtime.exec auf MAC
Command funktioniert in Kommandzeile aber nicht mit ProcessBuilder bzw. Runtime.exec auf MAC im Forum Allgemeine Java-Themen
Process pro =Runtime.getRuntime.exec("wine /Datei Pfad/
Process pro =Runtime.getRuntime.exec("wine /Datei Pfad/ im Forum Java Basics - Anfänger-Themen
Runtime Process bricht nicht ab!
Runtime Process bricht nicht ab! im Forum Allgemeine Java-Themen
WARNING: JavaFX API 8.0.111 - JavaFX runtime 8.0.102
WARNING: JavaFX API 8.0.111 - JavaFX runtime 8.0.102 im Forum IDEs und Tools
Einfaches refresh während runtime
Einfaches refresh während runtime im Forum Java Basics - Anfänger-Themen
Thema: Runtime und Process Probleme