我正在使用Oracle“自含应用程序打包”工具为JavaFX8桌面应用程序创建.deb
文件。生成的包文件可以在Ubuntu上毫无问题地安装,但随后应用程序无法运行。该文件的安装方式如下:
$ sudo dpkg -i vocabhunter-1.0.14.deb
$ /opt/VocabHunter/VocabHunter
VocabHunter Failed to locate JNI_CreateJavaVM
VocabHunter Failed to launch JVM
重要的是,我正在生成一个不包含JRE的包,经过调查,问题似乎与此有关。生成的文件/opt/vocabhunter/app/vocabhunter.cfg
包含以下行:
app.runtime=
如果我编辑它并将路径添加到Java,程序启动时不会出现任何问题。作为一种解决办法,我建议在安装.deb
bundle之后,用户运行以下命令:
sudo sed -i "s|app.runtime=.*|app.runtime=$JAVA_HOME|g" /opt/VocabHunter/app/VocabHunter.cfg
然而,这使得用户的事情变得困难。有人知道如何修复JavaFX打包工具的配置以避免这个问题吗?
<project name="VocabHunter Packaging" basedir=""
xmlns:fx="javafx:com.sun.javafx.tools.ant">
<property environment="env"/>
<property name="JAVA_HOME" value="${env.JAVA_HOME}"/>
<target name="jfxbundle" description="Build the application bundle">
<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
uri="javafx:com.sun.javafx.tools.ant"
classpath="${JAVA_HOME}/lib/ant-javafx.jar"/>
<fx:deploy outdir="${basedir}/build"
nativeBundles="${packageType}">
<fx:platform basedir=""/>
<fx:application id="VocabHunterId"
name="VocabHunter"
mainClass="${mainClass}"
version="${version}"/>
<fx:resources>
<fx:fileset dir="${basedir}/build/libs"/>
</fx:resources>
<fx:info title="VocabHunter">
<fx:association description="VocabHunter session"
extension="wordy"
mimetype="application/x-vnd.VocabHunterSession"
icon="${sessionIcon}"/>
</fx:info>
<fx:bundleArgument arg="icon"
value="${appIcon}"/>
<fx:bundleArgument arg="mac.CFBundleVersion"
value="${version}"/>
<fx:bundleArgument arg="launcher-cfg-format"
value="prop"/>
</fx:deploy>
</target>
</project>
我正在Ubuntu14.04上使用JDK1.8.0_92对此进行测试。
为了解决这个问题,您需要将jre_home
设置为在没有绑定JRE的情况下运行一些本机JavaFX启动器。在Windows上,它查看注册表内部并搜索HKLM\software\JavaSoft\Java Runtime Environment\[CurrentVersion]\JavaHome
。我找不到任何关于这件事的文件。
要解决此问题,您需要“更新”app.runtime
-value作为安装时执行的postinst
-script的一部分。类似这样的事情:
#!/bin/sh
# postinst script for APPLICATION_NAME
#
# see: dh_installdeb(1)
set -e
# summary of how this script can be called:
# * <postinst> `configure' <most-recently-configured-version>
# * <old-postinst> `abort-upgrade' <new version>
# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
# <new-version>
# * <postinst> `abort-remove'
# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
# <failed-install-package> <version> `removing'
# <conflicting-package> <version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package
case "$1" in
configure)
echo Adding shortcut to the menu
SECONDARY_LAUNCHERS_INSTALL
APP_CDS_CACHE
xdg-desktop-menu install --novendor /opt/APPLICATION_FS_NAME/APPLICATION_LAUNCHER_FILENAME.desktop
FILE_ASSOCIATION_INSTALL
if [ "SERVICE_HINT" = "true" ]; then
echo Installing daemon
cp /opt/APPLICATION_FS_NAME/APPLICATION_PACKAGE.init /etc/init.d/APPLICATION_PACKAGE
if [ -x "/etc/init.d/APPLICATION_PACKAGE" ]; then
update-rc.d APPLICATION_PACKAGE defaults
if [ "START_ON_INSTALL" = "true" ]; then
if which invoke-rc.d >/dev/null 2>&1; then
invoke-rc.d APPLICATION_PACKAGE start
else
/etc/init.d/APPLICATION_PACKAGE start
fi
fi
fi
fi
if [ -f /etc/profile ]; then
# load special environment variables
. /etc/profile
# remove stored value in case of dpkg-reconfigure
RUNTIME_PATH_TO_SET=""
if [ -z "$JRE_HOME" ]; then
echo JRE_HOME is not set, checking for JAVA_HOME being set
if [ -z "$JAVA_HOME" ]; then
echo JAVA_HOME is not set, checking for known locations
# look for known locations
KNOWN_JDK_DIRS="/usr/lib/jvm/java-8-oracle /usr/lib/jvm/java-8-openjdk-amd64 /usr/lib/jvm/java-8-openjdk-i386"
FOUND_JAVA_HOME=""
# Look for the right JVM to use (use the first one)
for potentialjdkdir in $KNOWN_JDK_DIRS; do
if [ -r "$potentialjdkdir/bin/java" -a -z "$FOUND_JAVA_HOME" ]; then
FOUND_JAVA_HOME="$potentialjdkdir"
fi
done
if [ -z "$FOUND_JAVA_HOME" ]; then
# still nothing found :(
echo Please make sure to have Java installed and JRE_HOME variable set before running APPLICATION_LAUNCHER_FILENAME
else
echo Updating runtime-settings using known location
RUNTIME_PATH_TO_SET="$FOUND_JAVA_HOME"
fi
else
echo Updating runtime-settings using JAVA_HOME
# JAVA_HOME is set, use that value
RUNTIME_PATH_TO_SET="$JAVA_HOME"
fi
fi
# always write runtime-location, as it might get removed again when user calls dpkg-reconfigure
sed -i "s|app.runtime=.*|app.runtime=$RUNTIME_PATH_TO_SET|g" /opt/APPLICATION_FS_NAME/app/APPLICATION_LAUNCHER_FILENAME.cfg
fi
;;
abort-upgrade|abort-remove|abort-deconfigure)
;;
*)
echo "postinst called with unknown argument \`$1'" >&2
exit 1
;;
esac
# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.
#DEBHELPER#
exit 0
在使用javafx-maven-plugin或javafx-gradle-plugin时,将此脚本放在src/main/deploy/package/linux
中,文件名为postinst
以便由JavaPackager/bundler获取。
免责声明:我是javafx-maven-plugin的维护者和javafx-gradle-plugin的创建者
编辑:也更新了用于处理dpkg-reconfigure
的脚本
我用的是早期的MacBook。10.6.8 将javac版本绑定到 终端返回javac 1.6.0_65,其中javac返回usr/bin/javac 使用Eclipse Juno 所以我假设安装了JRE+JDK。如有任何帮助,我们将不胜感激!我已经想办法解决这个问题好几个小时了。谢谢你。
我很难将javafx应用程序构建到中。应用程序(适用于mac)。我找到了一种合法的方法,以下是相关资源:http://docs.oracle.com/javafx/2/deployment/deploy_quick_start.htm然而,这远远不是我想要的。通过遵循该教程,我成功地从我的javafx项目中构建了一个应用程序,然而文件的大小太荒谬了,这是因为整个JRE都被捆绑在里面了。我现在正在寻
我正在尝试实现Spring Security和Angular JS教程中的OAuth2示例,但是在没有JWT的情况下,我遇到了一个问题。示例的代码可以在这里找到。 我对这个例子做了以下修改,试图让它在没有JWT的情况下工作。 /resource/src/main/resources/application。性质 注释了jwt keyValue的属性。 /ui/src/main/resources/
问题内容: 我正在尝试让Eclipse v3.5(Galileo)在我的计算机上重新运行-以前我没有任何问题地运行过它,但是现在我仍然遇到此错误: Java运行时环境(JRE)或Java开发工具包(JDK)必须可用才能运行Eclipse。搜索以下位置后未找到Java虚拟机:当前路径中的C:\ eclipse \ jre \ javaw.exe 我刚刚完成了JDK和SDK的全新安装。 我有Windo
问题内容: 我正在尝试使用以下代码: 我需要检查是否返回false,但是当删除时,它不再起作用。为什么会这样,我如何使它起作用? 问题答案: 当您引入警报时它起作用的原因是,它停止了执行并为异步调用提供了足够的时间来完成。 您没有获得正确的值,因为在发布请求完成且回调已执行时,您的JavaScript已经完成执行。 您在这里有一些选择: 声明全局变量并执行同步调用,您可以使用发布的代码ABC进行此