2012-03-20 37 views
1

是否有可能讓Applet使用本地jar?從已簽名的小程序中使用本地Jar

我的小應用程序應用程序需要有一些依賴項(價值66Mb的罐子)。用戶可以先安裝罐子,但是我怎樣才能從小程序中使用它們?

我可以讓他們保存到默認位置C:/對myApp和/ usr /本地/對myApp

我試着加載他們:

ClassLoader loader = URLClassLoader.newInstance(
        new URL[]{new URL("file://" + path + "/xuggle-xuggler-5.2.jar")}, 
        JNLP2Manager.getCurrentManager().getAppletClassLoader() 
      ); 

      Thread.currentThread().setContextClassLoader(loader); 

但罐子不會被自動添加到類路徑,我的意思是,我仍然需要單獨加載每個班級。

做了以下工作:

Class cls = loader.loadClass("com.xuggle.xuggler.video.ConverterFactory"); 
      String testString = ConverterFactory.XUGGLER_ARGB_32; 

但我已經加入到小程序載入的所有類?

P.S.我知道我不應該使用Applet,但Applet仍然適合我的這種應用。

+1

+1對於一個有趣的問題,並提前提到你想堅持一個小程序。關於應用程序的是什麼?這使得一個applet非常適合? (看來你將不得不跳過一些環節才能使它工作 - 請參閱AlexR的要點1.)您是否知道使用[Java Web Start]部署的applet(http://stackoverflow.com/tags/java-web-開始/信息)可以下載Jars懶惰(只有當他們需要時)? – 2012-03-20 15:49:42

+0

這對於一個非常嚴格的客戶羣來說是非常重要的,所以每個人都應該準備立即開始,因爲它是一個實時應用程序。我知道(1),但用戶在實際使用應用程序之前將有時間(安裝)。所以,讓Applet如此合適(我實際上開始使用JWS)的一點是,應用程序有多個Tabs,每個Tabs都是某種上下文。讓用戶在Web應用程序和本地應用程序之間切換,以便它可以選擇當前想要的applet的上下文,這非常令人困惑。 – 2012-03-20 17:18:30

回答

2

不,至少對於未簽名的小程序是不可能的。 applet類路徑相對於其代碼庫來定義,該代碼庫通常是從中下載applet的地方。

以下是可能的解決方法

  1. 對於簽名的Applet,您可以使用自定義的類裝載器(使用UrlClassLoader)讀取本地罐子類。
  2. 對於未簽名的小程序,您可以將上傳本地jar到服務器,然後從那裏使用它。我認爲它不是那麼糟糕:從用戶的角度來看,他只是「幫助」應用程序來查找定製jar的位置。真正發生的是該jar被上傳到服務器,並且applet從那裏讀取它。這種方式可以使用普通的HTML格式來實現,輸入標籤類型爲file。使用AJAX可以隱藏用戶的大量細節。
+0

所以,我正在談論一個簽名的Applet。所以,UrlClassLoader是我想要的。謝謝。 – 2012-03-20 17:06:17

+0

祝你好運,@Jhonny Everson – AlexR 2012-03-20 17:15:01

+0

因此,事實證明UrlClassLoader並沒有把類放在applet的類加載器中。加載時不會出現錯誤,但在嘗試使用它時給我找不到類。 – 2012-03-21 14:33:08

相關問題