如何从新型Oracle Java OSX捆绑包结构启动帮助页?
在Java的几个版本之前,通过将Swing应用程序捆绑在一起(例如使用如何从新型Oracle Java OSX捆绑包结构启动帮助页?,java,macos,swing,Java,Macos,Swing,在Java的几个版本之前,通过将Swing应用程序捆绑在一起(例如使用JarBundler编译存根),可以启动Apple help for Swing应用程序。我现在已经转而使用Oracle的appbundler(实际上是Infinitekind的),因为这似乎是让应用程序在视网膜屏幕上看起来清晰的唯一方法,而且可能也是事情的发展方向 有没有一种方法可以使用appbundler将可启动的帮助页面捆绑起来?(什么也没说) 或者现在是将帮助页面放在捆绑包的正确位置的问题 我应该明确表示,我没有使用X
JarBundler
编译存根),可以启动Apple help for Swing应用程序。我现在已经转而使用Oracle的appbundler(实际上是Infinitekind的),因为这似乎是让应用程序在视网膜屏幕上看起来清晰的唯一方法,而且可能也是事情的发展方向
有没有一种方法可以使用appbundler将可启动的帮助页面捆绑起来?(什么也没说)
或者现在是将帮助页面放在捆绑包的正确位置的问题
我应该明确表示,我没有使用XCode,也不打算使用XCode,尽管如果有一次性解决方案涉及到它,我自然会这样做。以下是我发现的可怕的黑客行为 我有三种成分:
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上也能工作