swing 程序发布(二)jnlp参数接收

本文介绍两种向JNLP文件动态传参的方法:一是修改JnlpFileHandler.java中的specializeJnlpTemplate方法;二是通过Servlet动态生成并输出JNLP文件内容。

 有些时候,我们需要往jnlp 中传入各种参数,但是jnlp 本身只是一个xml 描述文件,并不能接收参数,那该怎么办呢 ?
   这里有2种方法,可以往jnlp 传入动态参数
   方法一: 修改jnlp-servlet源码

JnlpFileHandler.java 中的specializeJnlpTemplate 方法
 原先的specializeJnlpTemplate

java 代码
  1. /* This method performs the following substituations  
  2.      *  $$name  
  3.      *  $$codebase  
  4.      *  $$context  
  5.      */  
  6.     private String specializeJnlpTemplate(HttpServletRequest request, String respath, String jnlpTemplate) {   
  7.         String urlprefix = getUrlPrefix(request);   
  8.         int idx = respath.lastIndexOf('/'); //   
  9.         String name = respath.substring(idx + 1);    // Exclude /   
  10.         String codebase = respath.substring(0, idx + 1); // Include /   
  11.         jnlpTemplate = substitute(jnlpTemplate, "$$name",  name);   
  12.         jnlpTemplate = substitute(jnlpTemplate, "$$codebase",  urlprefix + request.getContextPath() + codebase);   
  13.         jnlpTemplate = substitute(jnlpTemplate, "$$context", urlprefix + request.getContextPath());   
  14.         return jnlpTemplate;   
  15.     }  

  修改后的

java 代码
  1. private String specializeJnlpTemplate   
  2. (HttpServletRequest request, String respath, String jnlpTemplate) {   
  3. String urlprefix = getUrlPrefix(request);   
  4. System.out.println("urlprefix:" + urlprefix);   
  5. System.out.println("respath:" + respath);   
  6. int idx = respath.lastIndexOf('/');   
  7. String name = respath.substring(idx + 1);   
  8. System.out.println("name1:" + name);   
  9. String codebase = respath.substring(0, idx + 1);   
  10. jnlpTemplate   
  11.     = substitute(jnlpTemplate, "$$codebase",   
  12.          urlprefix + request.getContextPath() + codebase);   
  13. jnlpTemplate = substitute(jnlpTemplate, "$$context",   
  14.               urlprefix + request.getContextPath());   
  15. int index = name.indexOf("?");   
  16. System.out.println("index:" + index);   
  17. if (index != -1)   
  18.     name = name.substring(0, index);   
  19. System.out.println("name2:" + name);   
  20. jnlpTemplate = substitute(jnlpTemplate, "$$name", name);   
  21. Enumeration enum1 = request.getParameterNames();   
  22. while (enum1.hasMoreElements()) {   
  23.     String key = enum1.nextElement().toString();   
  24.     String value = request.getParameter(key);   
  25.     jnlpTemplate = substitute(jnlpTemplate, "$$" + key, value);   
  26. }   
  27. return jnlpTemplate;   
  28.    }  

方法二
    使用sevlet或者其他方式动态生成你的jnlp文件内容,然后直接输出到浏览器。

java 代码
  1. ...................   
  2.  response.setContentType("application/x-java-jnlp-file");       
  3.  PrintWriter out = response.getWriter();       
  4.  out.println("<?xml version=\"1.0\" encoding=\"GBK\"?>");   
  5.  ....................  
### 如何使用 Eclipse 发布 Swing 应用程序发布通过 Eclipse 开发的 Swing 程序,可以采用 Java Web Start 技术来实现应用程序的分发和运行。以下是具体方法: #### 使用 Java Web Start 发布 Swing 应用程序 Java Web Start 是一种用于部署基于 Java 的桌面应用程序的技术。它允许用户通过浏览器启动应用程序并自动更新到最新版本。 1. **准备 JAR 文件** 首先,在 Eclipse 中构建项目并将所有必要的文件打包成一个可执行的 JAR 文件。可以通过右键单击项目 -> Export -> Runnable JAR file 来完成这一操作[^3]。确保选择合适的库处理选项(例如提取所需的库到生成的 JAR 中)。 2. **创建 `JNLP` 文件** Java Web Start 使用 `.jnlp` 文件描述如何加载和运行应用程序。下面是一个典型的 `JNLP` 文件示例: ```xml <?xml version="1.0" encoding="UTF-8"?> <jnlp spec="1.0+" codebase="http://example.com/swingapp/" href="swingapp.jnlp"> <information> <title>My Swing Application</title> <vendor>Your Company Name</vendor> <description>A simple Swing application.</description> <icon href="application-icon.png"/> </information> <security> <all-permissions/> </security> <resources> <!-- Define the main jar --> <jar href="my-swing-app.jar" main="true"/> <!-- Add any additional jars here --> </resources> <application-desc main-class="com.example.MainClass"/> </jnlp> ``` 上述 XML 定义了一个基本的应用程序配置,其中指定了主类 (`main-class`) 和所需资源 (`.jar`)[^2]。 3. **签名 JAR 文件** 如果需要更高的安全性或希望在受限环境中运行,则应对生成的 JAR 文件进行数字签名。这一步骤可通过命令行工具 `jarsigner` 实现: ```bash jarsigner -keystore myKeystore -storepass password my-swing-app.jar alias_name ``` 这里 `-keystore` 参数指定密钥存储位置,`alias_name` 表示证书别名[^2]。 4. **上传至服务器** 将生成的 JAR 文件、图标以及其他依赖项上传到 Web 服务器上的指定目录中。同时将 `.jnlp` 文件放置在同一路径下以便访问。 5. **测试链接** 创建 HTML 页面提供指向该 `.jnlp` 文件的超链接供最终用户点击下载并运行您的 Swing 应用程序。例如: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Launch My Swing App</title> </head> <body> <a href="swingapp.jnlp">Click to launch the application!</a> </body> </html> ``` #### 注意事项 - 确保目标用户的计算机已安装支持 Java Web Start 功能的 JDK 或 JRE 版本。 - 所有的外部库也应被打包进同一个 JAR 文件或者单独作为依赖引入,并正确声明于 `JNLP` 文件中的 `<resources>` 节点之下[^2]。 ```java public class MainClass { public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(() -> { java.awt.EventQueue.invokeLater(() -> new JFrameExample().setVisible(true)); }); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值