You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用Javapackager构建的Java9 Mac应用无法启动

解决MacOS下Javapackager构建Java9应用无法启动(Error -10810: Is a directory)的问题

问题场景

用Ant的fx:deploy任务或直接调用javapackager命令构建MacOS原生Java9应用包时,构建过程无报错,但双击生成的.app文件无法启动,抛出如下错误:

The application cannot be opened for an unexpected reason, error=Error Domain=NSOSStatusErrorDomain Code=-10810 "kLSUnknownErr: Unexpected internal error" UserInfo={_LSFunction=_LSLaunchWithRunningboard, _LSLine=2732, NSUnderlyingError=0x600003f40630 {Error Domain=RBSRequestErrorDomain Code=5 "Launch failed." UserInfo={NSLocalizedFailureReason=Launch failed., NSUnderlyingError=0x600003f404b0 {Error Domain=NSPOSIXErrorDomain Code=21 "Is a directory" UserInfo={NSLocalizedDescription=Launchd job spawn failed}}}}}

但直接进入.app包内的Contents/MacOS目录,运行里面的可执行文件却能正常启动应用。

错误原因

底层错误Code=21 "Is a directory"明确说明:launchd尝试启动的路径指向了一个目录,而非实际的可执行文件。这大概率是应用包的Info.plist配置文件中,CFBundleExecutable字段的值错误,指向了目录而非正确的可执行文件名。

解决步骤

  1. 手动检查并修复Info.plist

    • 右键.app文件,选择「显示包内容」,打开Contents/Info.plist
    • 找到CFBundleExecutable字段,确认其值是否为Contents/MacOS目录下实际的可执行文件名
    • 如果值错误,直接修改为正确的可执行文件名(通常和.app包名称一致)
  2. 统一构建参数,避免路径冲突

    • 对于Ant的fx:deploy任务:确保outfile、fx:application的name、fx:info的name参数保持一致,避免生成的可执行文件和目录名冲突:
      <fx:deploy width="300" height="250"
                 nativeBundles="image"
                 outdir="Platforms/Macintosh/dist"
                 mainClass="<classname>"
                 outfile="<applicationname>"
         <fx:application refId="<appid>" name="<applicationname>"/>
         <fx:resources refid="<resources>"/>
         <fx:info title="<appname>" vendor="<myname>" name="<applicationname>"/>
      </fx:deploy>
      
    • 对于javapackager命令行:确保-outfile、-name参数统一,避免生成的可执行文件路径被错误识别为目录:
      javapackager -deploy -native image 
          -outdir Platforms/Macintosh/dist -outfile appname 
          -srcdir Platforms/Java/dist -srcfiles jarfilename 
          -appclass classname 
          -name "appname" -title "appname demo" 
          -nosign
      
  3. 清理残留后重新构建

    • 删除Platforms/Macintosh/dist目录下的所有旧构建产物
    • 重新执行Ant任务或javapackager命令,避免残留文件导致的路径识别错误
  4. 强制指定可执行文件名称(Java9兼容性修复)
    Java9的javapackager在MacOS上存在路径解析的已知bug,可通过添加参数强制指定可执行文件名称:

    • 命令行添加-Bmac.CFBundleExecutable=appname:
      javapackager -deploy -native image 
          -outdir Platforms/Macintosh/dist -outfile appname 
          -srcdir Platforms/Java/dist -srcfiles jarfilename 
          -appclass classname 
          -name "appname" -title "appname demo" 
          -nosign
          -Bmac.CFBundleExecutable=appname
      
    • Ant任务添加mac.CFBundleExecutable="<applicationname>"属性:
      <fx:deploy width="300" height="250"
                 nativeBundles="image"
                 outdir="Platforms/Macintosh/dist"
                 mainClass="<classname>"
                 outfile="<applicationname>"
                 mac.CFBundleExecutable="<applicationname>"
         <fx:application refId="<appid>"/>
         <fx:resources refid="<resources>"/>
         <fx:info title="<appname>" vendor="<myname>"/>
      </fx:deploy>
      

内容的提问来源于stack exchange,提问作者dbp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:40:31