Program: 70662
Project: 70662
Buggy source:
public void stopMovie(){
  Thread stopThread=new Thread(){
    public void run(){
      String movieFileName=filename.getText();
      myMain.setFrameRate(savedFrameRate);
      myMovieMaker.setGrabbing(false);
      myFrame.getViewer().cleanupScreenShots();
      stopButton.setEnabled(false);
      frameButton.setEnabled(false);
      startButton.setEnabled(true);
      myFrame.setAlwaysOnTop(false);
      if (myMain.getScheduler().isPlaying() == true && endRecordOnStop.isSelected()) {
        myMain.getScheduler().pause();
      }
      try {
        System.out.println("String_Node_Str");
        int frameCount=myMovieMaker.close();
        if (frameCount > 0) {
          if (!myMovieMaker.isRenderingAudioToFile()) {
            myMovieMaker.render(movieFileName);
          }
 else {
            ((HasAudio)myMain.getRootModel()).onStop();
            String tmpMovieFn="String_Node_Str" + tmpDirectory + "String_Node_Str";
            String finalMovieFn="String_Node_Str" + ArtisynthPath.getHomeDir() + "String_Node_Str"+ movieFileName;
            System.out.println("String_Node_Str");
            myMovieMaker.render(tmpMovieFn);
            String waveFn="String_Node_Str" + ConvertRawToWav.convert(myMovieMaker.getAudioSampleRate(),myMovieMaker.getAudioFileName());
            String[] args={tmpMovieFn,waveFn,"String_Node_Str",finalMovieFn};
            System.out.println("String_Node_Str" + finalMovieFn);
            new Merge(args);
          }
          if (saveMovieImage.isSelected()) {
            myMovieMaker.saveFirstFrame(movieFileName);
          }
        }
 else {
          System.out.println("String_Node_Str");
        }
        if (removeImages.isSelected()) {
          System.out.println("String_Node_Str");
          myMovieMaker.clean();
        }
      }
 catch (      Exception e) {
        e.printStackTrace();
      }
      if ((myMain.getRootModel() instanceof HasAudio) && ((recordAudio.isSelected()) || recordAudioTxt.isSelected())) {
        System.out.println("String_Node_Str");
        myMovieMaker.setRenderingAudioToFile(false);
        myMovieMaker.setRenderingAudioToText(false);
        recordAudio.setSelected(false);
        recordAudioTxt.setSelected(false);
        normalizeAudio.setSelected(false);
        normalizeAudio.setEnabled(false);
        ((HasAudio)myMain.getRootModel()).setRenderAudioToFile(false);
      }
      System.out.println("String_Node_Str");
    }
  }
;
  stopThread.start();
  isRecordingStarted=false;
}

Fixed version (ground truth):
public void stopMovie(){
  Thread stopThread=new Thread(){
    public void run(){
      String movieFileName=filename.getText();
      File mfile=new File(myMovieMaker.getDataPath(),movieFileName);
      mfile.getParentFile().mkdirs();
      myMain.setFrameRate(savedFrameRate);
      myMovieMaker.setGrabbing(false);
      myFrame.getViewer().cleanupScreenShots();
      stopButton.setEnabled(false);
      frameButton.setEnabled(false);
      startButton.setEnabled(true);
      myFrame.setAlwaysOnTop(false);
      if (myMain.getScheduler().isPlaying() == true && endRecordOnStop.isSelected()) {
        myMain.getScheduler().pause();
      }
      try {
        System.out.println("String_Node_Str");
        int frameCount=myMovieMaker.close();
        if (frameCount > 0) {
          if (!myMovieMaker.isRenderingAudioToFile()) {
            myMovieMaker.render(movieFileName);
          }
 else {
            ((HasAudio)myMain.getRootModel()).onStop();
            String tmpMovieFn="String_Node_Str" + tmpDirectory + "String_Node_Str";
            String finalMovieFn="String_Node_Str" + ArtisynthPath.getHomeDir() + "String_Node_Str"+ movieFileName;
            System.out.println("String_Node_Str");
            myMovieMaker.render(tmpMovieFn);
            String waveFn="String_Node_Str" + ConvertRawToWav.convert(myMovieMaker.getAudioSampleRate(),myMovieMaker.getAudioFileName());
            String[] args={tmpMovieFn,waveFn,"String_Node_Str",finalMovieFn};
            System.out.println("String_Node_Str" + finalMovieFn);
            new Merge(args);
          }
          if (saveMovieImage.isSelected()) {
            myMovieMaker.saveFirstFrame(movieFileName);
          }
        }
 else {
          System.out.println("String_Node_Str");
        }
        if (removeImages.isSelected()) {
          System.out.println("String_Node_Str");
          myMovieMaker.clean();
        }
      }
 catch (      Exception e) {
        e.printStackTrace();
      }
      if ((myMain.getRootModel() instanceof HasAudio) && ((recordAudio.isSelected()) || recordAudioTxt.isSelected())) {
        System.out.println("String_Node_Str");
        myMovieMaker.setRenderingAudioToFile(false);
        myMovieMaker.setRenderingAudioToText(false);
        recordAudio.setSelected(false);
        recordAudioTxt.setSelected(false);
        normalizeAudio.setSelected(false);
        normalizeAudio.setEnabled(false);
        ((HasAudio)myMain.getRootModel()).setRenderAudioToFile(false);
      }
      System.out.println("String_Node_Str");
    }
  }
;
  stopThread.start();
  isRecordingStarted=false;
}