<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Dev Zone
    偏執(zhí)狂才能生存,人生/事業(yè)的路上需要再堅(jiān)持一下
    但是又怎么說(shuō)得清堅(jiān)持的結(jié)果,道得盡堅(jiān)持的含義

      下午,試用了SkinLF(http://www.l2fprod.com),感覺(jué)非常好,程序的外觀得到了很大的改善,還可以根據(jù)自己的需要隨意調(diào)整得到自己想要的外觀,但是要將SkinLF應(yīng)用到Web Start中還有點(diǎn)問(wèn)題。這是因?yàn)椋瑆eb start使用到的資源必須包裝成jar文件,以的形式定義到j(luò)nlp資源文件中,而SkinLF的外觀配置文件是zip形式的。也許有人會(huì)說(shuō),把zip轉(zhuǎn)化成jar文件就可以了。是的,想象中這應(yīng)當(dāng)是可以的,可是實(shí)際情況不是如此,你會(huì)發(fā)現(xiàn)使用ClassLoader.getResourceStream("themepack.jar")的時(shí)候返回了Null,SkinLookAndFeel.loadLookAndFeel()會(huì)異常Stream closed.

      調(diào)試之后發(fā)現(xiàn),即使是在客戶(hù)端,在Eclipse中運(yùn)行的時(shí)候,如果不把themepack.jar定義到ClassPath中,也是無(wú)法加載的。

      我想這是一個(gè)普遍的問(wèn)題,根據(jù)我的理解,如果其他資源,比如圖片、xml文件、屬性文件等等能夠被加載,themepack.jar也應(yīng)該被加載。事實(shí)上應(yīng)該是這樣,但是關(guān)鍵在于SkinLF需要采用ZipInputStream解析zip(jar)文件,這時(shí)情況就不一樣了。具體的原因目前沒(méi)有搞清楚。

      在網(wǎng)上找了半天,終于發(fā)現(xiàn)一個(gè)Open Source的組件:Rachel,使用它很輕易就可以解決上面提到的問(wèn)題。

      Rachelhttp://rachel.sourceforge.net)是一個(gè)為解決Web start裝載資源困難而開(kāi)發(fā)的組件。它提供了兩種方法解決資源裝載問(wèn)題。

         方法一,使用class://URL Handler。
          這個(gè)方法采用新的URL協(xié)議:class://從jar文件中獲取資源。

         Step 1,注冊(cè)新的URL Handler,以支持class://協(xié)議(protocal)。
         例子:java.net.URL.setURLStreamHandlerFactory( new RachelUrlFactory() );

         Step 2,采用class://協(xié)議構(gòu)造URL,從jar文件中讀取資源。
      語(yǔ)法:class:///
      例子:

    class://test.LookAndFeelTest/themepack.zip
    class://com.l2fprod.gui.plaf.skin.SkinLookAndFeel/themepack.zip


      注意:這里,是Rachel用來(lái)定義資源文件所在的jar的,后面的相對(duì)于jar中的根目錄而言。上述例子中的jar的結(jié)構(gòu)如下:

          test.jar:

          test
    /LookAndFeelTest.class
          com
    /l2fprod/gui/plaf/skin/SkinLookAndFeel.class
          themepack.zip
          images
    /example.png
          html
    /index.htm

      Step 3,采用java.net.URL獲取資源。
          例子:

        URL url = new URL("class://test.LookAndFeelTest/themepack.zip");
        URL url 
    = new URL("class://test.LookAndFeelTest/html/index.html");
        URL url 
    = new URL("class://test.LookAndFeelTest/images/example.png");

        URL url 
    = new URL("class://com.l2fprod.gui.plaf.skin.SkinLookAndFeel/themepack.zip");
        SkinLookAndFeel.setSkin( SkinLookAndFeel.loadThemePack(url) );

      方法二,在程序中嵌入多線程的,小型的http server。

      Step 1,把你的資源放到j(luò)ar中。

      Step 2,在每一個(gè)jar中增加一個(gè)anchor class,幫組server定位資源所在的jar文件,這點(diǎn)類(lèi)似于方法一class:///的的
      例子:

       public class CrossRefAnchor
       {
         
    public CrossRefAnchor() {}
       }

      CrossRefAnchor沒(méi)有任何的實(shí)際意義,只是為了幫組定義資源所在的jar。

      Step 3,為每一個(gè)包含資源的jar用ClassResourceLoader注冊(cè)到WebResourceManager。
      例子:

       WebResourceManager roots = WebResourceManager.getInstance();
       roots.addResourceLoader( 
    new ClassResourceLoader( CrossRefAnchor.class ) );
       roots.addResourceLoader( 
    new ClassResourceLoader( JavaDocAnchor.class ) );

      Step 4,啟動(dòng)Server。
      例子:

       try
       {
         WebServer http 
    = new WebServer( 7272, roots );
         http.start();
       }
       
    catch( IOException e )
       {
         e.printStackTrace();
       }

      Step 5,采用URL從server獲取資源。
      例子:

       URL crossRefUrl = new URL( "http://localhost:7272/crossref/index.html" );
       URL url 
    = new URL( "http://localhost:7272/test.LookAndFeelTest/themepack.zip" );
       URL url 
    = new URL( "http://localhost:7272/test.LookAndFeelTest/html/index.html" );
       URL url 
    = new URL( "http://localhost:7272/test.LookAndFeelTest/images/example.png" );
    posted on 2005-05-17 22:11 dev 閱讀(1097) 評(píng)論(4)  編輯  收藏
    Comments
    • # re: 使用Rachel輕松解決Web Start裝載資源難的問(wèn)題
      Dennis
      Posted @ 2005-05-18 12:05
      有更簡(jiǎn)單的方法

      不是把 zip 取為 jar, 而是把 zip 放到 jar 內(nèi)

      把 themepack.zip 再在外打包成一個(gè)只有一個(gè)檔案的 jar
      (放在主要程式的 jar 內(nèi)也可, 但獨(dú)立放置更方便更新)

      例如
      themepack.jar
      \resource\themepack.zip

      themepack.jar
      \themepack.zip

      把 jar 放入 classpath (加到 webstart 的 jnlp 也可以)

      再使用 ClassLoader.getResourceStream("themepack.jar")
      或 ClassLoader.getResourceStream("/resource/themepack.jar")
      (跟據(jù) themepack.jar 的內(nèi)部路徑而定)

        回復(fù)  更多評(píng)論   
    • # re: 使用Rachel輕松解決Web Start裝載資源難的問(wèn)題
      jdev
      Posted @ 2005-05-18 13:24
      不行的,會(huì)異常,你可以試一下。  回復(fù)  更多評(píng)論   
    • # re: 使用Rachel輕松解決Web Start裝載資源難的問(wèn)題
      Dennis
      Posted @ 2005-05-18 16:06
      會(huì)嗎!?

      我只是把 zip 檔以一般 resource (e.g. *.properties, *.png) 的方式來(lái)做吧~?
      只是檔案會(huì)比較大吧!?

      (上面打錯(cuò)了 path, jar 內(nèi)的是 zip 才對(duì))  回復(fù)  更多評(píng)論   
    • # re: 使用Rachel輕松解決Web Start裝載資源難的問(wèn)題
      jdev
      Posted @ 2005-05-18 18:38
      我做過(guò)測(cè)試,不行。特殊就特殊在是zip格式,SkinLF需要讀取zip中的內(nèi)容,也就是說(shuō)需要采用ZipInputStream讀取zip文件,讀取的時(shí)候會(huì)異常,也許這是sun的一個(gè)bug。  回復(fù)  更多評(píng)論   

    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
     
    主站蜘蛛池模板: 亚洲国产精品综合久久一线| 亚洲成在人天堂在线| 成在线人免费无码高潮喷水| 亚洲日本VA午夜在线影院| 国产成人免费AV在线播放 | 久久久久久亚洲精品成人| 91免费精品国自产拍在线不卡| 羞羞视频免费网站含羞草| 亚洲AV人人澡人人爽人人夜夜| 全免费a级毛片免费看无码| 97超高清在线观看免费视频| 日本亚洲免费无线码| 精品国产_亚洲人成在线高清| 啦啦啦高清视频在线观看免费| 无码免费又爽又高潮喷水的视频 | 亚洲视频一区二区| 美女被羞羞网站免费下载| 亚洲AV成人精品网站在线播放| 国产女高清在线看免费观看| 99精品视频免费观看| 香港特级三A毛片免费观看| 亚洲AV成人一区二区三区AV| 亚洲国产精品碰碰| 欧洲精品成人免费视频在线观看| 成人免费ā片在线观看| 亚洲欧美成aⅴ人在线观看| 亚洲综合一区二区精品导航| 亚洲日韩国产精品乱| 午夜成人免费视频| 亚洲人成免费网站| 最近更新免费中文字幕大全| 亚洲av无码一区二区三区四区| 亚洲欧洲自拍拍偷午夜色| 久久精品亚洲福利| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 午夜国产大片免费观看| 久久天天躁狠狠躁夜夜免费观看| 老司机69精品成免费视频| 日本久久久久亚洲中字幕| 亚洲人成无码www久久久| 日本成人免费在线|