ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-为什么JfileChooser.showOpenDialog在Mac OSX上挂起?

2019-10-09 21:01:35  阅读:207  来源: 互联网

标签:java macos eclipse swt


我正在使用Eclipse开发SWT应用程序.以下代码在Windows上有效,但在Macintosh上无效:

import javax.swing.JFileChooser;

public class Test {
    public static void main(String[] args) {
        final JFileChooser fc = new JFileChooser();
        int ret = fc.showOpenDialog(null);
        System.out.println("ret  = " + ret);
    }
}

进入showOpenDialog后,Mac光标将永远旋转,并且在Java控制台中得到以下信息:

2013-09-05 08:20:40.568 java[1271:707] [Java CocoaComponent compatibility mode]: Enabled
2013-09-05 08:20:40.569 java[1271:707] [Java CocoaComponent compatibility mode]: Setting timeout for SWT to 0.100000
2013-09-05 08:20:41.227 java[1271:dd03] *** -[NSConditionLock unlock]: lock (<NSConditionLock: 0x7fa211e82600> '(null)') unlocked when not locked
2013-09-05 08:20:41.227 java[1271:dd03] *** Break on _NSLockError() to debug.

我尝试过Java 1.6,Java 1.7.我尝试设置
    -Dcom.apple.awt.CocoaComponent.CompatibilityMode = false -XstartOnFirstThread
但这没有效果.

这一定是非常基本的东西.我想念什么?

解决方法:

祝大家有同样的问题!

也许我来不及回答这个问题,但它可能会帮助遇到此问题的人.

经过研究后,我尝试使用LookAndFeel.然后,我尝试在打开“ showSaveDialog()”时更改外观,感觉似乎可行.我不能保证它会100%地起作用,但是到现在为止,它对我来说还不错(“未成功挂起:)”).如果失败,请再次报告错误:)这是我的代码:

//更新:最好在Mac OS X中使用FileDialogg

private File saveFile() {
    String osName = System.getProperty("os.name");
    String homeDir = System.getProperty("user.home");
    File selectedPath = null;
    if (osName.equals("Mac OS X")) {
        System.setProperty("apple.awt.fileDialogForDirectories", "true");
        FileDialog fd = new FileDialog(f, "Choose a file", FileDialog.LOAD);
        fd.setDirectory(homeDir);
        fd.setVisible(true);
        String filename = fd.getDirectory();
        selectedPath = new File(filename);
        if (filename == null) {
            System.out.println("You cancelled the choice");
        } else {
            System.out.println("You chose " + filename);
        }
        System.setProperty("apple.awt.fileDialogForDirectories", "true");
    } else {
        fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        fc.setCurrentDirectory(new File(homeDir));
        fc.setAcceptAllFileFilterUsed(false);
        fc.showOpenDialog(null);
        selectedPath = fc.getSelectedFile();
    }
    return selectedPath;
}

代码不是完美的,但你明白了:)

标签:java,macos,eclipse,swt
来源: https://codeday.me/bug/20191009/1881889.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有