JFileChooser在MAC OS里面的问题

最近遇到一个需求,下载ftp到本地系统,需要打开一个文件保存对话框。本地操作系统要支持windows、linux和mac。所以考虑用java的javax.swing.JFileChooser;

于是,写了个测试程序如下:

 

ExpandedBlockStart.gif 代码
public   static   void  main(String[] args) {
    String retStr 
=   "" ;
    JFileChooser   c
= new    JFileChooser();   
    c.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);   
    c.setDialogTitle(
" 请选择下载的目标文件夹 " );
    c.setDialogType(JFileChooser.SAVE_DIALOG);
    
int  ret  =  c.showSaveDialog( null );
    
if (ret == JFileChooser.CANCEL_OPTION){
        retStr 
=   "" ;
    }
    
else   if (ret == JFileChooser.APPROVE_OPTION){
        retStr 
=  c.getSelectedFile().getAbsolutePath();
        System.out.println(retStr);
        
// System.out.println(System.getProperty("os.name"));

    }
    
else   if (ret == JFileChooser.ERROR_OPTION){
        retStr 
=   "" ;
    }
}

 

 

在windows下运行没有问题,能正常得到保存的文件夹地址,但是到了MAC下,发现奇怪现象,比如如果选中/Volume/ftptest/,并且双击打开,得到的路径将是/Volume/ftptest/ftptest/ ,也就是目标文件夹会重复,但是若直选中文件夹,而不进入,将返回正确路径。。。

 

初步判定是JFileChooser的showSaveDialog对跨平台支持不好,或者是MAC系统对java支持不好。后来遍寻解决方法,在一老外的博客上看到解决办法:

The problem occurs when you use chooser.showDialog or chooser.showSaveDialog instead of chooser.showOpenDialog. On XP chooser.showDialog returns the correct path under the example given by the OP, but on Mac OS 10.5.7 (and probably earlier versions as well) you'll get ~/Desktop/Desktop .

敢情在MAC上不要用showDialog和showSaveDialog。。。。

 

所以,上面代码中showSaveDialog改为showOpenDialog,问题解决。

转载于:https://www.cnblogs.com/PatrickChen/archive/2010/04/27/1722199.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JFileChooserJava Swing 中的一个类,它提供了一个对话框,允许用户浏览文件系统并选择文件或目录。通过使用 JFileChooser,可以让用户轻松地选择文件或目录,而不需要编写自己的文件浏览器界面。 JFileChooser 提供了各种选项,可以设置文件过滤器、文件选择模式、默认文件名等。可以将 JFileChooser 放置在 JFrame 窗口中,也可以在对话框中使用它。当用户选择文件或目录后,JFileChooser 将返回一个 File 对象,可以使用它来打开、读取或保存文件。 以下是一些 JFileChooser 的用法示例: 1. 打开文件选择对话框并选择文件: ``` JFileChooser chooser = new JFileChooser(); int result = chooser.showOpenDialog(null); if (result == JFileChooser.APPROVE_OPTION) { File selectedFile = chooser.getSelectedFile(); // 处理选中的文件 } ``` 2. 打开文件选择对话框并选择目录: ``` JFileChooser chooser = new JFileChooser(); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int result = chooser.showOpenDialog(null); if (result == JFileChooser.APPROVE_OPTION) { File selectedDirectory = chooser.getSelectedFile(); // 处理选中的目录 } ``` 3. 打开文件选择对话框并设置默认文件名: ``` JFileChooser chooser = new JFileChooser(); chooser.setSelectedFile(new File("example.txt")); int result = chooser.showSaveDialog(null); if (result == JFileChooser.APPROVE_OPTION) { File selectedFile = chooser.getSelectedFile(); // 处理选中的文件 } ``` 需要注意的是,JFileChooser 可能会弹出一个安全警告框,提示用户是否允许访问文件系统。如果用户选择拒绝,JFileChooser 将无法从文件系统中读取文件或保存文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值