2011-06-16 108 views
5

我正在試驗Java Web Start。Java Web Start getDocumentBase

我剛剛寫了一個基本的JApplet,它有一個名爲getDocumentBase()Applet類的方法。這會將完整URL返回到Applet正在運行的位置(在Tomcat下),即http://myserver:8080/myapp/whateverapplet.jar

但是,我正在尋找類似的網絡啓動應用程序的東西。我需要知道它在哪裏運行。有什麼可以給我這些信息嗎?

編輯

在它運行我的意思是,如果我從JNLP文件中運行一個Web開始的方面,我想:

http://myserver:8080/myapp

如果我運行從一個文件夾中的JAR在網絡上我想:

\\服務器\ MYAPP

或者,如果我跑殲從文件夾AR我的機器上我想:

d:\ MYAPP

末編輯

+2

你的意思是「我需要知道它在哪裏運行」。 – aioobe 2011-06-16 12:05:57

+0

@aioobe - 我已經更新了這個問題。 – Andez 2011-06-16 13:54:09

回答

5

我想你想從正在運行的應用程序中獲取代碼庫URL?如果是這樣的話,你可以使用這個片斷:

final BasicService bs = (BasicService) ServiceManager.lookup(
    "javax.jnlp.BasicService"); 
final URL codeBase = bs.getCodeBase(); 

請注意,你必須依賴於JNLP API編譯這段代碼(爲BasicService類)。

+0

@Andrew - 感謝這個例子。我已經在我的代碼中嘗試過了,並且從web開始可以正常工作。就像我在aioobe上提到的其他答案一樣,我嘗試了MyClass.class.getProtectionDomain()。getCodeSource()。getLocation()。toExternalForm(),它給了我JAR文件的完整路徑,但是我想知道位置。 – Andez 2011-06-16 12:24:05

+0

@Andez:「@Andrew--感謝這個例子。」不客氣,但ITYM'Waldheinz'在那裏。 ;)我剛編輯答案。 – 2011-06-16 12:33:48

3

也許javax.jnlp.BasicService.getCodeBase是你在找什麼。

返回應用程序的代碼庫。代碼庫可以直接在JNLP文件中指定,也可以是包含應用程序主類的JAR文件的位置。

返回:
       與應用

(該BasicService模仿鬆散的AppletContext功能」 它提供了getDocumentBase()您指的代碼庫的URL。 )

+0

另請參閱我的小[演示。 'BasicService'](http://pscode.org/jws/api.html#bs)。 – 2011-06-16 12:13:24

+0

@aioobe - 謝謝你。這對我很有用。但是,我做了下面的代碼,它給了我不使用BasicService的JAR文件的完整路徑。 MyClass.class.getProtectionDomain()。getCodeSource()。getLocation()。toExternalForm() – Andez 2011-06-16 12:21:14

+0

@Andez:如果該代碼(大概運行在可信的應用程序中。)提供了本地文件系統中類文件的位置,不要在那裏寫任何東西,也不要期望在應用程序的運行時類路徑中找不到任何東西。爲什麼**完全**你想要這些信息嗎?知道位置給應用程序帶來的功能是什麼? – 2011-06-16 12:29:33