JFileChooser showSaveDialog有时不工作

时间:2015-07-03 13:27:51

标签: java macos netbeans save jfilechooser

我在OS X 10.9上使用Netbeans 7.2。 JFileChooser.showSaveDialog()在某些情况下失败。在我致电showSaveDialog之前,我致电showOpenDialog打开.srt文件。仅当我打开某些文件时,show对话框才会失败。来自/Volumes/..的已安装设备。这是代码:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
import org.apache.commons.io.FilenameUtils;

public class FileSaver extends JFileChooser {
private int result;
private File subFile;
private File save;
private File filename;
private String rectifiedSub;
private FileNameExtensionFilter filter;

    public FileSaver(File subFile, String rectifiedSub) {  
        this.subFile = subFile;
        this.rectifiedSub = rectifiedSub;
        filename = new File(System.getProperty("user.home"));
        filter = new FileNameExtensionFilter("Subtitle Files (*.srt)", "srt");        
    }

    public void createAndShowGUI() {
        System.out.println("6");
        this.setDialogTitle("Select destination");        
        System.out.println("6");
        this.setCurrentDirectory(filename);
        System.out.println("6");
        this.setSelectedFile(new File(subFile.getName()));        
        System.out.println("6");
        this.setFileFilter(filter);
        System.out.println("6");
        result = this.showSaveDialog(this);
        System.out.println("6");
        if(result == JFileChooser.APPROVE_OPTION) {            
            save = fixExtension(this.getSelectedFile());
            write(save);
        }
        this.setVisible(true);        
    }

    public void write(File save) {
        FileWriter fw = null;
        try {
            fw = new FileWriter(save);
            fw.write(rectifiedSub);            
        } catch (IOException ex) {
            Logger.getLogger(FileSaver.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                fw.close();
            } catch (IOException ex) {
                Logger.getLogger(FileSaver.class.getName()).log(Level.SEVERE, null, ex);
            }
        }       
    }

    public File fixExtension(File file) {
        if(!FilenameUtils.getExtension(file.getName()).equalsIgnoreCase(".srt"))
            file = new File(file.getParentFile(), FilenameUtils.getBaseName(file.getName()).concat(".srt"));
        return file;
    }

}  

输出:

  

6
  6
  6
  6
  6

它停在result = this.shhowSaveDialog(this);行之前的6处。之后程序冻结,并且保存对话框不会显示。它在某些文件上运行得很好。有人告诉我发生了什么事吗?

Git:https://github.com/Jimmy-666/Subzero.git

0 个答案:

没有答案