【问题标题】:Use Java web start to start application on the command line by the file name使用 Java web start 在命令行上按文件名启动应用程序
【发布时间】:2011-02-02 15:05:14
【问题描述】:

我可以使用 Java web start 通过带有 jdk 6 和 Windows XP 的 url 在命令行上启动我的 Swing GUI 应用程序: javawshttp://localhost:7001/webstart/myapp/launch.jnlp

如何使用 Java web start 在命令行中通过文件名启动我的 Swing GUI 应用程序?

以下方法不起作用: javaws -codebase '' 启动.jnlp java.net.MalformedURLException:无协议:'' 在 java.net.URL.(未知来源) 在 java.net.URL.(未知来源) 在 java.net.URL.(未知来源) 在 com.sun.javaws.Main.parseArgs(未知来源) 在 com.sun.javaws.Main.continueInSecureThread(未知来源) 在 com.sun.javaws.Main$1.run(未知来源) 在 java.lang.Thread.run(Unknown Source)

javaws -codebase "" launch.jnlp
java.net.MalformedURLException: unknown protocol: c
    at java.net.URL.<init>(Unknown Source)
    at java.net.URL.<init>(Unknown Source)
    at java.net.URL.<init>(Unknown Source)
    at com.sun.javaws.Main.parseArgs(Unknown Source)
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
    at com.sun.javaws.Main$1.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

javaws -codebase "file:." launch.jnlp
com.sun.deploy.net.FailedDownloadException: Unable to load resource: file:./$$name
    at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.getCacheEntry(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.getCacheEntry(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.getResourceCacheEntry(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.getResource(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.getResource(Unknown Source)
    at com.sun.javaws.Launcher.updateFinalLaunchDesc(Unknown Source)
    at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
    at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
    at com.sun.javaws.Launcher.launch(Unknown Source)
    at com.sun.javaws.Main.launchApp(Unknown Source)
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
    at com.sun.javaws.Main$1.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

javaws -codebase "file:." file://launch.jnlp
CouldNotLoadArgumentException[ Could not load file/URL specified: file://launch.jnlp]
    at com.sun.javaws.Main.launchApp(Unknown Source)
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
    at com.sun.javaws.Main$1.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

javaws file://launch.jnlp 
CouldNotLoadArgumentException[ Could not load file/URL specified: file://launch.jnlp]
    at com.sun.javaws.Main.launchApp(Unknown Source)
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
    at com.sun.javaws.Main$1.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

#The following has no error message, but nothing appear on the computer screen:
javaws -codebase "" -J-Xrunjdwp:transport=dt_socket launch.jnlp
javaws -J-Xdebug -J-Xnoagent -J-Xrunjdwp:transport=dt_socket,server=n,suspend=y launch.jnlp
javaws -codebase "" -J-Xrunjdwp:transport=dt_socket,server=n,suspend=n launch.jnlp
javaws -codebase "" -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n launch.jnlp

launch.jnlp文件如下:

<?xml version="1.0" encoding="utf-8"?> 

<jnlp spec="1.0+" codebase="$$codebase" href="$$name"> 

  <information> 
    <title>${com.prod.my.myapp.common.client.title}</title> 
    <vendor>I</vendor> 
    <homepage href="http://devzone/english/dev%20template/html_templates/main.asp"/> 
    <description>${com.prod.my.myapp.common.client.description}</description> 
    <description kind="short">${com.prod.my.myapp.common.client.short_description}</description> 
    <icon href="$$context/images/chflag.jpg"/> 
  </information> 

  <security> 
      <all-permissions/> 
  </security> 

  <resources> 

  <java version="1.6.0_05" href="http://java.sun.com/products/autodl/j2se" max-heap-size="256m"/> 

    <!-- myapp Application --> 
    <jar href="myprod.myapp.client.jar"/> 
    <jar href="myprod.reports.jar"/> 

    <!-- TR Client jar --> 
    <jar href="extern.ejb-client.jar"/> 

    <property name="java.naming.factory.initial" value="weblogic.jndi.WLInitialContextFactory"/> 
    <property name="java.naming.provider.url" value="${com.prod.my.myapp.common.client.naming_provider}"/> 
    <property name="weblogic.jndi.enableServerAffinity" value="true" / 

  </resources> 

  <application-desc main-class="com.prod.my.myapp.common.framework.applicationmainwindow.gui.myappAp­plication"/ 

</jnlp> 

【问题讨论】:

    标签: java jnlp java-web-start


    【解决方案1】:

    尝试一个代码库值..

    "file:."
    

    【讨论】:

    • javaws -codebase "file:." launch.jnlp 不起作用。有关错误消息,请参见上文。
    • 好的 - 现在我查看您当前的输出,它强调在通过服务器获取 JNLP 之前,存在未解析的变量。服务器填写(“解决”)额外的细节。除非你对这些值进行硬编码,否则它永远不会直接在本地文件系统中工作。
    • 如何将额外的细节保存在文件中或显示到控制台?有“println”命令吗?
    • “额外细节”是每个以“$$”开头的属性值。查看浏览器生成的 JNLP 的源代码(如果需要,将其拉入 JEditorPane)并将这些详细信息用于“离线”版本。顺便说一句 - 这一切有什么意义?如果您有一个在运行时填写详细信息的服务器,为什么不使用它?
    • 我在stackoverflow.com/questions/4851758/… 提出了这个问题,并认为了解launch.jnlp 文件将实现我使用Eclipse 调试我的java web start Swing 应用程序的目标。
    【解决方案2】:

    看来您的 JNLP 文件应该与 JNLPDownloadServlet 一起使用。它将$$name$$codebase 占位符替换为基于应用程序当前运行的服务器的当前值。 (顺便说一句,您也可以使用$$server 来引用当前服务器)

    如果您从磁盘本地运行它,您可以通过在命令行中将codebase 设置为参数-codebase 来覆盖它。正确的值为file:.。你的问题是$$name 占位符没有被替换,它会尝试下载&lt;jnlp ... href="$$name"&gt;,结果是file:.$$name,由于不存在这样的文件,它会失败。

    您可以在本地运行时完全省略 &lt;jnlp /&gt; 标签中的 href="$$name" 属性,也可以手动将其更改为 jnlp 文件名,例如&lt;jnlp ... href="myApp.jnlp" /&gt;.

    另外请记住,如果你想使用存储在磁盘上的一些本地 jar,并且你想通过绝对路径引用它,你应该使用这种格式 &lt;jar href="file:c:/myJars/myJar.jar"&gt;(正斜杠)。

    一切顺利。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-06
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 2014-08-20
      • 2010-11-21
      相关资源
      最近更新 更多