JNLP(Java Network Launching Protocol )是java提供的一种可以通过浏览器直接执行java应用程序的途径,它使你可以直接通过一个网页上的url连接打开一个java应用程序。
Java桌面应用程序以JNLP 的方式发布,如果版本升级后,不需要再向所有用户发布版本,只需要更新服务器的版本,这就相当于让java应用程序有了web应用的优点。

[以上内容摘自百度搜索,侵删]

简而言之,jnlp可通过 javaws 运行一个软件的快捷方式。当软件有更新时,只需将快捷方式指定的目标源更换掉即可。

现将jnlp学习和使用的一些情况总结如下。碰到的问题及解决方法随开发过程不断更新。

1 Tomcat安装

见Ubuntu下Tomcat安装。

2 开发HelloWorld程序

新建工程和HelloWorld程序,工程结构为:

Sample

  • com.shao.test

    • HelloWorld.java

将程序打包成可运行的jar,命名为Sample.jar。确保完全安装java环境,同时在java安装目录的bin子目录下,有keytool工具。接着,在Sample.jar目录下运行下面的命令,进行签名前的准备工作:
keytool -genkey -keystore myKeystore -alias jwstest(myKeystore为keystore名称、jwstest为别名,均可自定义)(题外:会提示"keytool -importkeystore -srckeystore root -destkeystore root -deststoretype pkcs12"。)

输入命令后,会提示输入用户名、密码等,按照提示随便输入即可,但一定要记住密码。运行结束它将会在当前路径下创建名为myKeystore(根据自定义)的文件。

如果想查看一下生成的myKeystore(根据上面定义)文件的内容,可以使用下面的命令:keytool -list -keystore myKeystore

运行下面的命令,对Sample.jar包进行签名:
jarsigner -keystore myKeystore Sample.jar jwstest(myKeystore、jwstest根据以上定义)。

注意:必须对jar包进行签名,否则运行时会提示运行的包没有签名并无法继续运行。

3 Sample.jnlp

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://localhost:8080/Sample/" href="http://localhost:8080/Sample/Sample.jnlp"><information><title>Sample Demo Application</title><vendor>Cay S. Horstmann</vendor><description>A Sample</description></information><resources><java version="1.8.0+"/><jar href="Sample.jar"/></resources><application-desc main-class="com.shao.test.Sample"/>
</jnlp>

4 部署到tomcat

在tomcat安装目录下的webapps中新建Sample文件夹,将生成的jar包和新建的Sample.jnlp放在Sample目录下。

5 网页访问

在浏览器地址栏中输入 http://localhost:8080/Sample/Sample.jnlp ,会弹出有个窗口提示下载Sample.jnlp,将Sample.jnlp下载到本地。打开命令终端,使用/usr/local/jdk……/bin/javaws Sample.jnlp运行程序。

在实际运行中,弹出“Application Blocked By Java Security”错误,经确认为jdk1.8抛弃了更低的安全级别而只保留了“高”和“更高”级别(可运行java安装目录下的/jre/bin/ControlPanel查看)。解决的办法为在ControlPanel的“Security”页的Site List中添加 http://localhost:8080/Sample/Sample.jnlp , 添加后可运行,但是运行时会发出安全警报。

默认运行时无输出,需要查看输出信息时,在java安装目录中的jre/bin目录下运行ControlPanel,选择Advanced->java Console->always show。

6 一些经验

  1. 通过eclipse生成jar包时,无需对第三方引用包签名,当使用ant 生成jar包时,第三方包需逐一进行签名,且所有签名都应与生成的jar包的签名一致。
  2. 当jnlp需要运行在其它机器上时,jnlp配置文件中,须将localhost修改成本机具体的ip地址。
  3. jnlp需访问数据库时,需要做如下设置
  • mysql -u root -p //输入密码进入数据库
  • grant all privileges on . to ‘root’@’%’ identified by ‘root’; //%标识所有IP均可访问以root为用户名和密码的数据库
  • flush privileges;//更新
  • 在/etc/mysql/目录中修改my.cnf文件,将bind Address 127.0.0.1这句话注释掉。
  • 重启mysql服务。(通过/etc/init.d/mysql stop或者/etc/init.d/mysql start关闭或启动mysql时,若出现Rejected message,1 matched rules;………………等错误时,使用sudo service stop/start mysql 来关闭或启动mysql)
  1. jar包重新签名
    一些引用的第三方jar可能已经签名,但因为运行的需要,所有第三方jar的签名需与生成的待运行的jar签名相同,这意味着需要对此类jar重新签名。
  • 解压 unzip <jar名称>.jar -d <jar名称>
  • 删除掉META-INF里面的.SF和.RSA文件
  • 将.MF文件中所有的“Name”“SHA1-Digest”都删掉
  • 在解压目录下运行jar cvf <jar名称>.jar * 可将jar包的原有签名删除;
  • 根据签名jar包的方法对删除了原签名的jar包重新签名即可

7 实际开发遇到的问题及解决情况

  1. 与Glg相关的几个jar包Glg2.jar、GlgCE.jar、GlgInt.jar在运行中均显示无法加载包

已解决。通过解压缩,发现这几个Jar包的MANIFEST.MF文件中均有Pemissions和Codebase的配置,删除掉相关配置后再重新打包签名即可,步骤见上节相关说明。

  1. GPS/BD时间订阅和报错消息订阅都未起作用,报错为:Java.net.SocketException:Protocol family unavailable。

具体原因待查明。可能的原因为jnlp不支持订阅模式,先已将这两部分使用其余方法实现。

  1. 第三方包和本地资源文件夹config加载的问题

将3rdParty文件夹和config文件夹放在tomcat/webapps/cglt/目录下。此时,虽然已经在build.xml中将config文件做为源文件,见下图。但加载config文件夹中的配置文件仍有问题。


解决办法见下图。原来的程序中使用了in = new FileInputStream(properties);这个语句,但是发现尽管config文件已经是source folder了,还是报FileNotFoundException。后来,改成了
in = *.class.getClassLoader().getResourceAsStream(properties)之后,就可以访问了。

4. 软件有记录数据功能,将数据记录在运行机器的规定文件夹中,但jnlp只是运行一个快捷方式,运行在其它机器上时,没有权限跨主机读写文件夹和其中的文件。

这是一个难题,不知道怎么解决。

JNLP的使用及碰到的一些问题相关推荐

  1. java中记忆深刻的问题_工作中碰到比较印象深刻的问题(面试必问)

    面试官经常会问到这么一个问题.有些人可能有些误区认为我们工作中碰到的问题都必须是很牛的技术来解决了才能说出来.其实不是的,我们工作中碰到的任何难点都只是在解决办法上的思想上没有打通而已. 举个例子: ...

  2. 包含锚点平滑滚动效果/解决锚点链接碰到固定定位问题/导航选中背景变色/固顶/返回顶部效果全...

    <script type="text/javascript">$(function() {//锚点平滑滚动效果 $('a[href*=#],area[href*=#]' ...

  3. oracle10个,OracleDBA新手经常碰到的10个Oracle错误

    OracleDBA新手经常碰到的10个Oracle错误(英文) This document contains information about errors frequently encounter ...

  4. 深度学习——训练时碰到的超参数

    深度学习--训练时碰到的超参数 文章目录 深度学习--训练时碰到的超参数 一.前言​ 二.一些常见的超参数 学习率(Learning rate) 迭代次数(iteration) batchsize e ...

  5. 使用svn时碰到的一个的问题

    做技术的人,需要有完美主义,很多问题,如果当时不能彻底解决,往往会留下更大的麻烦.这个字符编码的问题,当时碰到的时候没有主义,以后遇到的时候也是抱着躲避的鸵鸟主义的态度,今天认真对待了一下,发现问题并 ...

  6. 网购时碰到这种卖家操作,一定要记得,否则损失很大

    前几天帮朋友在天猫,买了块电视机付款1789,说是申请退运费,退回200元 电视昨天送到的,试了下就签字了,晚上的时候就跟客服沟通了,朋友也只是给了我1589,我深思先把那200要回来吧. 客服跟我说 ...

  7. java jnlp被阻止_JNLP应使用特定的Java版本,但会出现错误结果

    我在这里面临一个问题.我想使用特殊版本来运行我们的 java webstart应用程序,但只需要一个jnlp. ("经过测试,- blabla我们不能使用新版本- blabla"随 ...

  8. 转-Asp.Net MVC及Web API框架配置会碰到的几个问题及解决方案

    前言 刚开始创建MVC与Web API的混合项目时,碰到好多问题,今天拿出来跟大家一起分享下.有朋友私信我问项目的分层及文件夹结构在我的第一篇博客中没说清楚,那么接下来我就准备从这些文件怎么分文件夹说 ...

  9. 碰到IBM笔记本电脑无线网络故障确认与排除方法

    碰到IBM笔记本电脑无线网络故障确认与排除方法 适用机型:所有笔记本电脑 文档内容:ThinkPad -- 无线网络故障确认与排除方法 在应用本指南之前应了解, 无论使用怎样的无线连接设备,一个无线接 ...

最新文章

  1. thymeleaf 的 th:each简单应用
  2. Codeforces 1323 div2题解ABC
  3. 信息学奥赛一本通C++语言——1087:级数求和
  4. 发动机悬置python仿真计算
  5. 会走索引吗 oracle_茅台酒会走兰花的老路吗?
  6. 我的成长笔记20210325(一天写了247条用例)
  7. CentOS7 安装部署k8s
  8. 【滤波器】基于matlab低通滤波器(LPF)设计【含Matlab源码 323期】
  9. XenCenter开启虚机提示VDI不可用
  10. 怎么配置FlyMcu(stm32串口下载软件)有图 超详细
  11. jave-1.0.2.jar
  12. 常见的9种前端跨域解决方案详解
  13. Universal Radio Hacker(URH):一个用于逆向解析和攻击无线通信协议的开源工具
  14. android viewholder静态,android – 静态ViewHolder并在使用RecyclerView时获取上下文
  15. C#去除gif图片水印的记录
  16. 行列式的3种计算方法技巧和一点注意
  17. python空行分隔代码_python空行分隔
  18. 如何在word 插入矢量图
  19. 基于因果推断的根因分析
  20. 2.5.1 HMC扫描小型机

热门文章

  1. windows server2012R2 apache+mod_wsgi+django
  2. “跑在互联网上的售货机”友宝签约法大大
  3. 无盘服务器4根网线雨两根网线的区别,网线接法的描述:实际用到4根。
  4. 2018GIAC全球互联网架构大会上海站最新日程抢先看!
  5. EXCEL VBA 之录制宏
  6. Vue+Element动态生成新表单并添加验证
  7. 解决Ubuntu插上耳机没声音
  8. IntelliJ IDEA 15 MAC破解版
  9. A. K-divisible Sum
  10. 如何判断数字华容道中随机排列的数字阵列是否有解