繁体   English   中英

从OSX“ .app”捆绑包运行Java会导致“错误-10810”

[英]Running Java from an OSX “.app” bundle causes “Error -10810”

这已通过虚拟盒在OSX Mavericks上进行了测试,在Macbook上在优胜美地上进行了测试。

我有一个名为“ HelloWorld.jar”的简单可执行jar。

我正在尝试为此Java应用程序创建一个.app捆绑包。 (显然,我的实际程序更复杂,但我将其缩减为最棘手的问题)。


案例1-没有JAVA的简单套装-完全可以工作

第1步-在控制台上进行测试-工作

在控制台上,我键入

echo "Hello World (no java)" > /Users/josh/Desktop/test-output.txt

我查看了test-output.txt并看到了预期的输出。

第2步-使用脚本进行测试-可以

我制作了一个简单的bash脚本,名为test

 #!/bin/bash
 echo "Hello World (no java)" > /Users/josh/Desktop/test-output.txt

chmod +x test ,然后键入./test ,我查看了test-output.txt并看到了预期的输出。

第3步-创建基本应用捆绑包-作品

mkdir -p test.app/Contents/MacOS
cp test test.app/Contents/MacOS
open test.app

我查看了test-output.txt并看到了预期的输出。


案例2-使用JAVA进行简单捆绑-不起作用

设定

文件HelloWorld.java

public class HelloWorld {
    public static void main ( String[] args ) {
        System.out.println ( "Hello World" );
    }
}

归档myManifest

Main-Class: HelloWorld

在控制台执行以下操作:

javac HelloWorld.java
jar -cfm HelloWorld.jar myManifest HelloWorld.class

第1步-在控制台上进行测试-工作

在控制台上,键入:

java -jar HelloWorld.jar > /Users/josh/Desktop/java-output.txt

我得到了预期的输出: Hello World

第2步-使用脚本进行测试-可以

我制作了一个简单的bash脚本,名为“ helloworld”

 #!/bin/bash
 java -jar HelloWorld.jar > /Users/josh/Desktop/java-output.txt 

chmod +x helloworld ,然后输入./helloworld ,我得到了预期的输出: Hello World

步骤3(使用Java)-不起作用

mkdir -p helloworld.app/Contents/MacOS
cp helloworld helloworld.app/Contents/MacOS
cp HelloWorld.jar helloworld.app/Contents/MacOS
open helloworld.app

我收到以下错误:

LSOpenURLsWithRole() failed with error -10810 for the file /Users/josh/Desktop/helloworld/helloworld.app

/user/Josh/desktop/java-output.txt出现,但里面没有文本。


如您所见,在.app捆绑包中运行Java时,似乎发生了某些事情,这给了我-10810错误。

注意:我还尝试了第一个示例的变体,在该示例中,我启动了bash脚本/Applications/TextEdit.app,并且运行成功。 这让我怀疑问题是专门针对Java的。

有谁知道导致此问题的原因以及如何解决该问题?

我目前没有方便使用的OS X计算机来进行测试,但是另一个问题在网络上的提示似乎暗示您需要设置JAVA_HOME并可能设置PATH才能使java在App Bundle中工作。

特别是,在外壳程序脚本的顶部,尝试运行程序之前,请放置以下几行,并对系统进行适当的更改。

export JAVA_HOME=/path/to/my/java/install
export PATH=$PATH:/path/to/directory/containing/java

更一般而言,要诊断问题的根本原因,请更改脚本中的现有行以捕获stderr然后查看该行是否为您提供了有用的输出,否则这些输出可能会被应用程序的环境所吞噬。

 java -jar HelloWorld.jar > /Users/josh/Desktop/java-output.txt  2>  /Users/josh/Desktop/java-error.txt

如果您能够捕获打印的错误,则可能足以说明根本原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM