在全新安装 Big Sur 和 AdoptOpenJDK 11 的 MacBook Pro (2015) 上,我开发了一个使用 JFileChooser 的用于教育目的的 Java 程序。我没有使用任何 IDE 特定的代码。由于程序的其余部分并不重要,这里是一个对我产生相同问题的最小示例(注意:这里仅作为示例,单击按钮将打开文件选择器,选择一个文件并单击“确定”将更改按钮的文本为“确定”):
import javax.swing.*;
import java.awt.event.*;
public class Test extends JFrame implements ActionListener {
private JFileChooser jf;
private JButton jb;
public Test() {
setSize(480,320);
jf = new JFileChooser();
jf.setDialogType(JFileChooser.OPEN_DIALOG);
jb = new JButton("CLICK ME");
jb.addActionListener(this);
add(jb);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(jb)) {
jf.setVisible(true);
final int result = jf.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION) {
jb.setText("OK");
}
}
}
public static void main(String[] args) {
new Test();
}
}
如果我启动程序通过终端 (java Test
或编译为 jarjava -jar Test.jar
) 一切正常。我可以打开文件选择器,它会显示磁盘上的文件和文件夹。
如果我开始编译通过双击jar,程序也会启动,但是如果我打开文件选择器我看不到磁盘上的任何文件因此我无法将数据加载和保存到磁盘。
由于我只在 Mac 上遇到这些问题(不在 Windows 10 或 Lubuntu Linux 上),这可能是由于 Mac 上错误的 Java 设置而导致的一个非常具体的问题。但是,由于我安装了 Big Sur 的全新副本和 AdoptOpenJDK 11 for Mac 且没有进行任何更改,我想知道其他想要运行我的程序的人(教师和学生)是否会出现此问题。
那么问题可能是什么以及如何解决这个问题(对于我和其他人来说)?
我已经通过活动监视器发现双击的 jar 已通过 JavaLauncher 加载(但我在磁盘上找不到它,并且无法更改任何系统设置)。
我也在这里搜索过类似的问题。但这些大多与将文件保存在错误的路径有关。
找到解决方案会很高兴。谢谢您的回答!
我遇到了同样的问题 - 几年前我编写了一个 java-for-all-desktops jar 应用程序,它在所有 java 版本、所有 Mac OS 和 Windows 上都运行良好,直到我将 jar 文件放在 Big Sur (OSX 11.2) 上,此时它无法从常规文件系统读取或写入常规文件系统。就其本身而言,它默认仅读取和写入 /private/var... 中的 tmp 区域,而不是读取和写入包含 jar 文件的目录,并可以选择使用 jFileChooser 在真实文件系统中移动。如果我明确地将其设置为桌面上的开头,那么它可以移动到不同的目录,但看不到或访问文件。
经过几个小时的努力后,我根据上面的一些内容找到了如何修复它(谢谢!)...原始海报非常接近!
我发现在 /System/Library/CoreServices/Jar Launcher.app 中双击 JAR 文件时会启动该程序
通过进入系统偏好设置 -> 安全 -> 隐私 -> 完整磁盘访问,我能够导航到上述 Jar Launcher.app 并将其添加到列表中,然后可以双击我的 jar 文件并像往常一样使用完整磁盘访问访问文件系统:)
不需要它来解决我的问题,因为,正如你们上面所说的那样,java似乎从终端或Jar Launcher继承了它的访问权限,但如果有人需要,您也可以添加java本身及其任何模块到完整磁盘访问列表(如上所述)。最简单的方法是使用 java -jar YourProgram.jar 从终端启动 jar,然后,当 jar 出现在 Dock 中时,右键单击它并单击“在 Finder 中打开”。这将打开包含 java 可执行文件的文件夹。然后您可以用鼠标选择它们并将它们直接拖到“完整磁盘访问”列表中。我一路上尝试过,但是通过双击罐子来使罐子正常工作既不够也没有必要。享受!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)