swing组件的java线程同步

xtupzzrd  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(353)

在多次尝试将主任务与其子任务(线程)同步后,我失败了。我还没有找到任何从swing组件调用的示例。
我创建了一个白色面板,在上面显示一个剪辑电影。这很管用。但是,一旦线程终止,我就想控制主任务。似乎在“setvisible(true)”之后,下一条指令不会执行。我还尝试了一个循环发出睡眠1秒,但没有执行。这是我最后的密码。

/* Auteur: Gérard MARTINELLI  */
     import gegeutil.Gegetools;
     import javax.swing.JFrame;
     import javax.swing.JOptionPane;
     import java.io.BufferedReader;
     import java.io.InputStreamReader;
     import java.util.Vector;
     import java.util.concurrent.CountDownLatch;
     import java.awt.Color;

     public class JouerClip extends javax.swing.JDialog   

     /*    Variables et constantes  */

     public static final long serialVersionUID = 1401213293925293574L;

     public     static String  titre       =   "",
                            film         =   "";
     protected  Thread      th           =   new Thread();
     protected  boolean     inService    =   false,
                           internal     =   false;
     public static Process process     =    null;
     public static  String videoplayer  =   "E:/PotPlayer/PotPlayerMini64.exe";
     public static  String pathFilm     =   "F:/Films";

        public JouerClip(JFrame owner, String  filmName, boolean inter) // constructeur
     { 
        super(owner,true);
        if (Gegetools.isEmpty(filmName)) setVisible(false); 
        film =   filmName;
        internal = inter;
         initialize();
     }

     public void initialize() 
     {    
        setSize(1136, 873);
        getContentPane().setLayout(null);
        getContentPane().setBackground(Color.WHITE);
        setLocationRelativeTo(null); 
        th = new Thread() 
        {
              public void run() 
              {
                   System.out.println("Thread  running");

               jouer(pathFilm+"/" + film); 
                   System.out.println("Thread stopped");
                   inService= false;
              }
          };
          inService= true;
          th.start();
          setVisible(true);
          System.out.println("I continue the main task");
          try 
          {
               CountDownLatch latch = new CountDownLatch(3);
               latch.await(); // Wait for countdown
               this.setVisible(false);
               if (internal) System.exit(0); else this.setVisible(false);
              } 
         catch (InterruptedException e) 
         {
                 e.printStackTrace();
             }
     }

     public static void jouer( String path) 
     {
        //  This works pretty well. 
        // When the clip ends, the videoplayer has  gone. 
     }

     public static void main(String[] agrs) 
     {
             new JouerClip(new JFrame(), "Seven.mp4", true);
    }
    }
cdmah0mi

cdmah0mi1#

我想我已经解决了我的问题。在jdialog contenpane中,我创建了一个带有actionlistener的jbutton,然后在离开run方法之前,发出一个doclic()。这将执行我想要的(例如返回给调用者)。它工作得很好。

相关问题