gpt4 book ai didi

java - 为什么 jar 文件在通过双击启动时没有从磁盘读取的权限 - 但如果从终端启动则没有?

转载 作者:行者123 更新时间:2023-12-04 16:25:24 29 4
gpt4 key购买 nike

在带有全新安装的 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 或用 java -jar Test.jar 编译为 jar ) 一切正常 .我可以打开文件选择器,它会显示我磁盘上的文件和文件夹。
如果我开始编译 jar 通过双击 ,程序也会启动,但是如果我打开文件选择器 我在磁盘上看不到任何文件 因此我无法加载和保存数据到磁盘。
由于我的 Mac 上只有这些问题(在 Windows 10 或 Lubuntu Linux 上没有),这可能是一个非常具体的问题,因为我的 Mac 上的 Java 设置是错误的。但是,由于我在没有更改任何内容的情况下为 Mac 安装了 Big Sur 和 AdoptOpenJDK 11 的新副本,我想知道其他想要运行我的程序的人(老师和学生)是否会出现此问题。
那么可能是什么问题以及如何解决这个问题(对我和其他人来说)?
我已经通过 Activity 监视器发现双击的 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 可执行文件的文件夹。然后您可以用鼠标选择它们并将它们直接拖到“完整磁盘访问”列表中。我一直在尝试这样做,但是通过双击 jar 来使 jar 正常工作既不够也没有必要。享受!

关于java - 为什么 jar 文件在通过双击启动时没有从磁盘读取的权限 - 但如果从终端启动则没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65469536/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com