它程序这么做事有道理的。不过不太明白为什么“只要那个程序没有关闭,生成的所有的临时文件都不能删除,说文件正在使用.”我蛮感兴趣的,如果不介意,是否可以让我帮忙调试一下?[email protected]
如果不可以的话,把循环播放那段代码贴出来看看,是不是资源未释放什么的问题呢?

解决方案 »

  1.   

    多谢老兄了.我已经加了你的MSN了.
      

  2.   

    我是用一个JList将所有的文件都列出来.然后用一个线程扫描,让JList的项不断往下选,选到最后了,又从头开始.这是那个扫描线程;
    Runnable rScan = new Runnable(){
    public void run(){
    while(Thread.currentThread() == tScan){
    if(fileTitle == null)
    return;
    while(isContinue){
    iItem++;
    if(iItem == fileTitle.length){
         iItem = 0;
      }
      mediaList.setSelectedIndex(iItem);
    isContinue = false;
    }
    }
    System.out.println ("À뿪ɨÃèÏß³Ì");
    }
    };这是JList事件监听处理
    public void valueChanged(ListSelectionEvent e){
    int si;

    si = mediaList.getSelectedIndex();
    if(si == old_si)
    return;

    old_si = si;
    //System.out.println ("´¥·¢Ñ¡Ôñlistʼþ,µ±Ç°Ñ¡ÔñΪ:si="+si);

    isContinue = false;
    isDraw = true;
    drawImg = null;
    stop();
    tLoadMedia = null;

    //ɾ³ý»º´æÖеÄÎļþ;
    String delPath = "C:\\WINNT\\Temp\\";
    File dirDel = new File(delPath);
    if(dirDel.isDirectory()){
    String[] fileDelList = dirDel.list();

    for(int di=0;di<fileDelList.length;di++){
    if(fileDelList[di].endsWith(".MPG") || fileDelList[di].endsWith(".avi")){
    File fileDel = new File(delPath + fileDelList[di]);
    if(fileDel.isFile()){
    fileDel.delete();
    }
    }
    }
    } if(tDrawImg != null){
    tDrawImg.interrupt();
    tDrawImg = null;
    }
    btStop.setEnabled(true);
    btPlay.setEnabled(false);

    //chosenFile = (String)mediaList.getSelectedValue();

    chosenFile = filePath[si];
    strUrl = strImgURL + chosenFile;

    //&para;&Aacute;&Iacute;&frac14;&AElig;&not;&Euml;&micro;&Atilde;÷&Icirc;&Auml;×&Ouml;;
    imgIntro = fileIntro[si];
    txtIntro.setText(imgIntro);


    iItem = si;
    System.out.println ("selection = " + chosenFile + ",,,hasBeCancel="+this.hasBeCancel);
    Graphics g = panel.getGraphics();
    panel.removeAll();

    if(g != null){
    g.setColor(new Color(245,249,236));
    //g.fillRect(0,0,panel.WIDTH,panel.HEIGHT);
    g.fillRect(0,0,320,260);

    g.setColor(Color.black);

    g.drawString("&Otilde;&yacute;&Ocirc;&Uacute;×°&Ocirc;&Oslash;&para;à&Atilde;&frac12;&Igrave;&aring;&ETH;&Aring;&Iuml;&cent;,&Ccedil;&euml;&Eacute;&Ocirc;&ordm;ò...",50,100);
    }

    if(player != null){
    player.deallocate();
    player = null;
    }

    int pos = strUrl.lastIndexOf(".");
    String exName = strUrl.substring(pos+1);
    //System.out.println ("exname="+exName);
    if(exName.equalsIgnoreCase("jpg") || exName.equalsIgnoreCase("gif")){
    //&Ecirc;&Ccedil;&Iacute;&frac14;&AElig;&not;;
    panel.setBounds(0,0,320,240);
    panel.invalidate();
    Image img = null;
    try{
    //img  = Toolkit.getDefaultToolkit().getImage("media\\"+path+"\\"+ID+"\\media\\"+chosenFile);
    URL url = new URL(strUrl);
    img  = Toolkit.getDefaultToolkit().getImage(url);
    //System.out.println ("&frac14;&Oacute;&Ocirc;&Oslash;&Iacute;&frac14;&AElig;&not;&sup3;&Eacute;&sup1;&brvbar;:"+strUrl);
    }catch(Exception ei){ei.printStackTrace();}

    MediaTracker mt = new MediaTracker(panel);
    mt.addImage(img,0);
    try{
    mt.waitForID(0);
    }catch(InterruptedException e1){
    e1.printStackTrace();
    }

    drawImg = img;
    tDrawImg = new Thread(rDrawImg);
    tDrawImg.start();

    return;

    }else{
    tLoadMedia = new Thread(rLoadMedia);
    tLoadMedia.start();
    }
    }这是多媒体的装载线程:
    Runnable rLoadMedia = new Runnable(){
    public void run(){
    if(Thread.currentThread() == tLoadMedia){
    URL url = null;

    try{
    //url = new URL("http://zx3/gis/gis_gm/data_manager/MPEG/twxd/123.mpg");
    url = new URL(strUrl);
    //System.out.println ("&frac14;&Oacute;&Ocirc;&Oslash;&Iacute;&oslash;&Acirc;&ccedil;&Ecirc;&Oacute;&AElig;&micro;&sup3;&Eacute;&sup1;&brvbar;:"+strUrl);
    }catch(Exception er){
    System.out.println ("&frac12;¨&Aacute;&cent;URL&sup3;&ouml;&Ograve;ì&sup3;&pound;");
    er.printStackTrace();
    }
    //if ((mrl = new MediaLocator("file:///"+mediaFile1)) == null)

    //if((mrl = new MediaLocator(url)) == null);
    // Fatal("Can't build URL for " + url);
        try {
    player = Manager.createPlayer(url);
         } catch (Exception em) {
    em.printStackTrace();
    Fatal("Could not create player for " + url);
         }
    player.addControllerListener(DisplayMedia.this);


    tPlayMedia  = new Thread(rMedia);
    tPlayMedia.start();
    }

    System.out.println ("*******&Agrave;&euml;&iquest;&ordf;×°&Ocirc;&Oslash;&para;à&Atilde;&frac12;&Igrave;&aring;&Iuml;&szlig;&sup3;&Igrave;*******");
    }
    };这是多媒体的播放线程,代码比较乱,呵呵..
    Runnable rMedia = new Runnable(){
    public void run(){
    if(hasBeCancel)
    return;
    if(player == null){
    System.out.println ("media file not find");
    }else{
    System.out.println ("Playing media file");
    player.start();
    }

    }
    };
      

  3.   

    我列出来的包括图片和视频文件,图片就直接画出来,没有调用到JMF,不管图片部分
      

  4.   

    在这里贴大段的代码是非常难读的诶。。找个地方把你的player关掉然后删除看看吧。
      

  5.   

    唉,问题总算解决了.没有调用player.close()这个方法
      

  6.   

    多谢老兄了,调用了player.close()后,播放器会自己把那也是个生成的临时文件删除,不用我动手删除了.不过我发现一个新问题,用URL从网上读视频时,是边下载边播放的.还没下载完就开始播放了,这样,它在播放的时候没有了那个进度条了,替代的是显示的播放时间.这样,如果视频很长时,它就不能前进后退了,这很不爽啊.而它下载完后,第二次播放的时候,它又会下载一个新的临时视频文件,所以还是一样.