Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从新型Oracle Java OSX捆绑包结构启动帮助页?_Java_Macos_Swing - Fatal编程技术网

如何从新型Oracle Java OSX捆绑包结构启动帮助页?

如何从新型Oracle Java OSX捆绑包结构启动帮助页?,java,macos,swing,Java,Macos,Swing,在Java的几个版本之前,通过将Swing应用程序捆绑在一起(例如使用JarBundler编译存根),可以启动Apple help for Swing应用程序。我现在已经转而使用Oracle的appbundler(实际上是Infinitekind的),因为这似乎是让应用程序在视网膜屏幕上看起来清晰的唯一方法,而且可能也是事情的发展方向 有没有一种方法可以使用appbundler将可启动的帮助页面捆绑起来?(什么也没说) 或者现在是将帮助页面放在捆绑包的正确位置的问题 我应该明确表示,我没有使用X

在Java的几个版本之前,通过将Swing应用程序捆绑在一起(例如使用
JarBundler
编译存根),可以启动Apple help for Swing应用程序。我现在已经转而使用Oracle的appbundler(实际上是Infinitekind的),因为这似乎是让应用程序在视网膜屏幕上看起来清晰的唯一方法,而且可能也是事情的发展方向

有没有一种方法可以使用appbundler将可启动的帮助页面捆绑起来?(什么也没说)

或者现在是将帮助页面放在捆绑包的正确位置的问题


我应该明确表示,我没有使用XCode,也不打算使用XCode,尽管如果有一次性解决方案涉及到它,我自然会这样做。

以下是我发现的可怕的黑客行为

我有三种成分:

  • Infinitekind的appbundler fork的最新版本,允许
    plistentry
    s
  • ${resource.dir}
  • 中名为
    libHelpBookJNI.jnilib
    的旧编译帮助书启动存根
    ${resource.dir}
  • 发射存根是从哪里来的?从编译这个

    #import <JavaVM/jni.h>
    #import <Cocoa/Cocoa.h>
    
    JNIEXPORT void JNICALL Java_edu_harvard_wcfia_yoshikoder_HelpBook_launchHelpViewer (JNIEnv *env, jclass clazz) {
    [[NSApplication sharedApplication]] performSelectorOnMainThread:@selector(showHelp:) withObject:NULL waitUntilDone:NO];
    }
    
    #导入
    #进口
    JNIEXPORT void JNICALL Java\u edu\u harvard\u wcfia\u yoshikoder\u HelpBook\u launchHelpViewer(JNIEnv*env,jclass clazz){
    [[NSApplication sharedApplication]]执行SelectorOnMainThread:@selector(showHelp:),对象为NULL waitUntilDone:NO];
    }
    
    它在Java1.6时代就已经运行了,现在显然仍然如此。我以前的ant编译任务如下所示:

    <target name="jni"
          description="Compile the JNI bridge that launches OSX help">
    <exec executable="cc">
      <arg line="-c"/>
      <arg line="-I/System/Library/Frameworks/JavaVM.framework/Headers"/>
      <arg line="-o HelpBookJNI.o"/> 
      <arg value="src/objc/HelpBookJNI.m"/>
    </exec>
    <exec executable="cc">
      <arg line="-dynamiclib"/>
      <arg line="-framework JavaVM"/>
      <arg line="-framework Cocoa"/>
      <arg line="-o libHelpBookJNI.jnilib"/>
      <arg value="HelpBookJNI.o"/>   
    </exec>
    <delete file="HelpBookJNI.o" quiet="true"/> 
    </target>
    
    
    
    编译了那个年迈的、无疑脆弱的库之后,我手动将文件插入到应用程序包的相关位置

    <bundleapp ...>
      ...
      <plistentry key="CFBundleHelpBookFolder" value="Help"/>
      <plistentry key="CFBundleHelpBookName" value="Yoshikoder Help"/>
    </bundleapp>
    
    <copy todir="Yoshikoder.app/Contents/Resources/Help/">
      <fileset dir="onlinehelp" includes="**/*" />
    </copy>
    <copy file="${resource.dir}/libHelpBookJNI.jnilib"
          todir="Yoshikoder.app/Contents/Java/" />
    
    
    ...
    
    如果这看起来像是我边走边编造的,那是因为我边走边编造。但它在运行Yosemite和Java1.8JDK(加上苹果自己的僵尸Java1.6)的Mac上也能工作