簡體   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