【问题标题】:Java $APP_PACKAGE Pathname Variable Not WorkingJava $APP_PACKAGE 路径名变量不起作用
【发布时间】:2013-01-13 07:50:57
【问题描述】:

根据Java Info.plist Key Reference for Mac,您应该能够使用 $APP_PACKAGE 变量来访问 Mac 应用程序包的根目录。所以我认为我可以在 Contents/Resources/ 文件夹中存储一个文件并通过调用来访问它

new File("$APP_PACKAGE/Contents/Resources/MyFile.txt")

但是,这似乎不起作用,我只是得到一个找不到文件的错误。此外,我尝试了以下方法以查看是否可以缩小问题范围:

new File("$APP_PACKAGE/Contents").exists() //Returns false
System.out.printline(new File("$APP_PACKAGE").getParent()) //Returns an empty string

我确实使用 Eclipse 的导出到 Mac OS X 应用程序包生成了 Mac OS X 包,如果这很重要的话。任何帮助(或合适的解决方法)将不胜感激!

【问题讨论】:

    标签: java macos info.plist


    【解决方案1】:

    我想通了!尽管应用程序很难告诉我工作目录是什么,但我设法弄清楚它是应用程序所在的文件夹。然后我能够通过将应用程序称为目录来解决它:

    new File("MyApp.app/Contents/Resources/MyFile.txt").exists() //Returns true!!!
    

    我还想补充一点,我在 this blog post 上找到了将以下内容添加到我的 info.plist 文件中的建议:

    <key>WorkingDirectory</key>
    <string>$APP_PACKAGE/Contents/Resources</string>
    

    不幸的是,这似乎不适用于 Mac OS 10.7.5,工作目录只是重置为应用程序所在的文件夹。

    【讨论】:

      【解决方案2】:

      如果该值设置为环境变量,您可以使用System.getEnv()先获取APP_PACKAGE的实际值,然后使用它创建File对象。

      String appPackage = System.getEnv("APP_PACKAGE");
      new File(appPackage + "/Contents/Resources/MyFile.txt");
      

      也就是说,从阅读您的given link 来看,我想知道这个变量是否只是在从plist 文件中读取时才被消耗,而不是在您的 Java 进程中。如果变量实际上没有作为环境变量提供给您的 Java 程序,您可以轻松地在 Contents 目录中检索您的文件,因为我记得 Mac 上的应用程序打包应该具有以下架构

      /Contents
        /MacOS
          YourBinary
        /Resources
          YourFile.txt
      

      根据您应用程序的当前工作目录(我认为它应该默认为/Contents/MacOS),您可以使用../Resources/YourFile.txt 检索正确的路径。如果不知道当前工作目录,可以打印new File(".").getAbsolutePath()的值

      【讨论】:

      • System.getenv("APP_PACKAGE") 正在为我返回一个空字符串。
      • 您对 Mac OS X 包的结构是正确的(Resources 文件夹中有一个 Java 文件夹,其中包含所需的所有 JAR 文件)。不幸的是,../Resources/YourFile.txt 不起作用,并且 new File(".").getAbsolutePath() 会导致 NullPointerException。与 getPath() 相同。
      猜你喜欢
      • 2014-01-20
      • 2015-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-12
      • 2017-10-26
      • 2022-08-03
      • 1970-01-01
      相关资源
      最近更新 更多