要發布一個SWT程序,首先要將SWT程序打包成一個JAR文件,因為SWT程序用到了外部的JAR包,所以在打包的時候需要引入外部JAR包。在這一步,試過了很多的方法,總是不成功,在網上搜索了一下,看到這個方面手動處理的資料非常的少,大部分都是介紹說裝一個fat-jar插件,然後用插件自動處理。在我試驗了N次后,最後把要用到的外部JAR包,全解壓在自己項目的JAR包中后,解壓到JAR包的根目錄就好,終於可以成功運行了。
接下來就是發布SWT程序了,用JavaWebStart發布SWT程序很簡單,需要學習的內容就只有jnlp文件的編寫。下面具體看一下發布的步驟:
1.建立一個web項目, 在web項目根目錄中加入一個jnlp文件。比如:
<?xml version="1.0" encoding="UTF-8"?>
<!--codebase 属性指出搜索应用程序资源的顶级URL,下面的icon/jar元素都是以这个URL为基本.-->
<jnlp codebase="http://127.0.0.1:8081/webstart">
<information>
<!-- 在"开始"-"运行"菜单中输入"javaws"或"javaws -viewer"启动Web Start,会看到客户端已经安装的webstart应用程序-->
<!-- title :应用程序标题 vendor:供应商 title/vendor 元素必须,会显示在用"javaws -viewer"命令 打开的应用程序缓存查看器(Java Application Cache Viewer)中-->
<title>HelloWorld</title>
<vendor>Lively Corporation</vendor>
<description>HelloWorld Test Example for WebStart.</description>
<!--homepage :存放有关应用程序的相关文档的URL,如help文件等,仅仅是description作用-->
<homepage href="http://127.0.0.1:8081/webstart/index.html"/>
<!--icon 指定图标会显示在应用程序缓存查看器中,在查看器中新建webstart快捷方式到桌面时也会显示为快捷方式图标, 只支持GIF/JPEG格式,其它格式无效-->
<icon href="./images/logo.jpg"/>
<!--splash 在sun的文档中提到会出现在webstart启动时的闪屏中,不过可能由于速度问题,我没有观察到-->
<icon kind="splash" href="./images/logo.jpg"/>
<!-- 允许离线启动,可以使用javaws -offline命令-->
<offline-allowed/>
</information>
<resources>
<!-- 指定客户端需要安装的j2se版本,下面指定为1.5+,如果版本是1.4,在链接此jnlp文件时会提示更新j2se版本-->
<j2se version="1.5+"/>
<!-- 指定要下载到本地的jar文件(注意,所有的文件都需要打包才能够下载),可以包含一些资源文件,如icons/configuration files,可以使用getResource方法取得-->
<jar href="./jar/jws/helloworld.jar"/>
</resources>
<!--application-desc 必须,指定webstart启动时执行jar文件中的哪个类-->
<application-desc main-class="jws.HelloWorld"/> </jnlp>
2.在web項目中加入要發布的SWT程序的JAR包。路徑要與jnlp中寫的相符,如果有圖片要在項目中加入響應的目錄和圖片
3.在web項目中寫一個頁面。比如:index.html
<html>
<body>
<a href="HelloWorld.jnlp">HelloWorld</a>
</body>
</html>
完成以上三步,啟動tomcat,在瀏覽器中輸入http://localhost:8080/webstart/index.html
,點擊HelloWorld超鏈接,將啟動JavaWebStart,運行應用程序。
此時程序會提示發成意外異常。大概是個java.lang.reflect.InvocationTargetException異常
本來是沒有問題的,如果要發布的程序是純JAVA程序的話,按上面做就行了。但是這裡不行,原因是SWT程序需要調用操作系統的窗口小部件(widget)。所以這裡需要訪問客戶端本地資源。
下面來修改前面的代碼。
1.首先修改jnlp文件,在 <information>元素後面,<resources>元素前面加入一個<security>元素。
<security>
<all-permissions/>
</security>
使要發布的程序可以訪問本地資源。
2.由於JavaWebStart沙箱的限制,要訪問本地資源,就必須給要發布的JAR包簽名。
簽名目的:
为了使Applet或者Java Web Start程序能够访问客户端本地资源,需要对Applet或者JWS程序jar包进行数字签名,之后客户端打开Applet或者JWS程序的时候会提示是否允许该程序访问本地资源,用户如果要用你的程序,当然只能选择OK了。这样你的程序就能按照某种访问权限来访问客户机的本地资源了。
签名步骤:
1.将程序打成jar包。
这个我就不多说了,用eclipse,netbeans等开发工具很方便就能打包的。
2.用keytool命令生成.store文件。
在任意文件夹下建立一个keytool.bat文件,输入
keytool -genkey -keystore xxx.keystore -alias xxx -validity 3650
保存,双击执行。将在当前目录下生成一个xxx.keystore文件, -alias后接的是别名,-validity后面接的是该证书有效天数,这里3650表示10年。(用这个证书签名的程序10年内有效)。
3.用jarsigner程序对jar包进行签名。
新建jarsinger.bat文件,输入
jarsigner -keystore xxx.keystore helloworld.jar xxx
保存,双击执行,helloworld.jar就被签名了。
經過以上兩步修改后,就可以發布你的SWT程序。現在在瀏覽器中輸入http://localhost:8080/webstart/index.html
點擊HelloWorld超鏈接,運行應用程序,此時JavaWebStart程序管理器會提示是否信任程序,直接點擊運行就可以了。
到此一個SWT程序就發布完畢了。
分享到:
相关推荐
JavaWebStart.rarJavaWebStart.rarJavaWebStart.rar
JWS 是作为 JSR-56 的一部分而创建的,目的是提供一种方法来分发在客户端上的 JVM 中运行的 Java 应用程序
javawebstart 所需要的签名相关
这篇文章基于一个简单的应用,该应用使用JRuby和Swing实现了一个简单的ObjectSpace浏览器。Ruby的ObjectSpace特性提供了一种方式来访问系统中所有对象。例如,我们可以这样打印所有使用中的字符串:ObjectSpace.each...
基于JavaWebStart技术的应用程序在工业自动化中的实现.kdh
第2周介绍Java类库,包括向量、堆栈、映射、散列表和位组等数据结构,以及Swing组件、布局管理器和JavaWebStart等;第3周介绍高级主题,包括输入和输出、对象序列化、通过Internet进行通信、使用数据库、XML、Web...
youAdmin将为osCommerce建立一个客户端。 它具有友好的JAVA Swing GUI,将通过JavaWebStart技术启动。 youAdmin首先将具有添加,修改和删除产品的能力。 进一步,youAdmin将能够编辑订单和自定义
主要介绍web star概念做等,重要介绍了一个详细的开发步骤!
Java Web Start 是由 SUN 公司创建的一种新的应用程序部署技术。JDeveloper 支持基于 XML 的 JNLP (Java Network Launching Protocol) 定义,Java Web Start 技术是建立在 JNLP 基础之上的。在 JDeveloper 中用 Java...
java web start 教程 关于一些java web start的知识的ppt
jnlp开发手把手教,特别适合新接触jnlp的开发着参考,根据步骤能够自己开发