我正在调试一个jnlp应用程序,我曾经能够通过eclipse远程调试它,但现在不再了.
启动它的命令是:
/usr/java/jdk1.6.0_14/jre/bin/java -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1445 -Djnlpx.heapsize=64m,512m -DtrustProxy=true -Xverify:remote -Djava.security.policy=/lib/security/javaws.policy -Dfile.encoding=UTF-8 -Xbootclasspath/a:/usr/java/jdk1.6.0_14/jre/lib/deploy.jar:/usr/java/jdk1.6.0_14/jre/lib/javaws.jar:/usr/java/jdk1.6.0_14/jre/lib/plugin.jar -classpath /usr/java/jdk1.6.0_14/jre/lib/deploy.jar com.sun.javaws.Main launch.jnlp
Listening for transport dt_socket at address: 1445
Run Code Online (Sandbox Code Playgroud)
问题是,当我附加eclipse调试器时,它会关闭并重新启动; 所以调试器附加到第一个进程; 当它死了,调试器也是如此.
调试器脚本实际上并不重要; 因为如果suspend = n,jnlp进程会在调试器启动之前自行重新启动.
我试过跟踪它,但选项-XX:TraceSupport = true(以及我尝试过的其他变体)会导致jvm错误.
我正在使用Fedora 11,Eclipse Java EE IDE for Web Developers.(构建ID:20090621-0832)
我问是否有人知道如何解决这个问题,或者至少如何打开更好的日志记录(即将所有控制台输出捕获到日志中;这样我就可以看一下屏幕上闪烁的第一个控制台一毫秒)
谢谢!
在java webstart文件(jnlp)中,您可以指定nativelib标记以加载二进制文件.您还可以通过指定os属性为不同的操作系统指定不同的操作系统.
例如:
<resources os="Linux">
<nativelib href="....jar"/>
</resources>
<resources os="Windows">
<nativelib href="....jar"/>
</resources>
<resources os="Mac OS X">
<nativelib href="....jar"/>
</resources>
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能为不同的架构指定不同的二进制文件呢?例如win32和win64或linux 32和linux 64bit.操作系统.我在哪里可以找到os属性的选项列表?
我有一个工作的JNLP应用程序,我需要分发给各种非技术最终用户.
如果用户的计算机安装了最新的JVM,一切都很好.他们只需双击我发送的JNLP文件,Java Web Start完成剩下的工作.
现在我想分发一些有或没有JVM的东西,例如一个.exe自动下载兼容JVM的文件(如果不存在),然后调用javaws.exe下载.jar文件并启动应用程序.
Launch4J是我找到的最接近的匹配,但它无法启动程序javaws.exe.唯一的选择是java和javaw
我想要的产品可以:
.exe不需要预先安装JVM 的自包含文件.jnlp如果需要,解析文件并确定要下载的正确JVM(我知道Java Web Start可以在必要时下载JVM,但我想避免必须下载两个,第一个用于引导Java Web Start,第二个用于运行应用程序,可能需要特定但不同的JVM.).exe,但我不希望第二次提示确认他们信任.jar来自同一来源并使用相同证书签名的文件.)我假设这需要自动下载程序在启动JWS之前安装证书.).jar与JVM同时在后台下载应用程序资源(例如文件).这将要求在安装JVM之前运行缓存,因此缓存必须以本机代码实现,DownloadService然后使用JNI 与缓存接口.这样的产品是否存在?我怀疑它没有,但它值得一试.
更新我发现这篇文章有一些相关问题的解决方案,虽然它是专为离线安装而设计的,我主要关心的是在线安装.
我有一个有效的JNLP应用程序,但想添加一些端到端的冒烟测试.
是否可以通过URL下载,启动和编程操作JNLP应用程序?
我如何在链接中运行示例?我在哪里可以获得JNLP开发人员包?
谢谢Samrat
我正在学习Java并尝试使用Java web start运行一些示例.
但是,我似乎无法找到那个包javax.jnlp.
同样的错误让我在windows和linux上都遇到了困难.我在windows上安装了oracle jdk 7.OpenJDK 1.6是在linux上安装的版本.
在互联网上搜索没有运气的包裹.它在oracle的网站上已不再可用,因为他们坚持认为该软件包是jdk的一部分.
我搜索了安装目录中的it.some声称它在jnlp.jar文件中,其他人在javaws.jar文件中声明...这两个文件都不是我安装的一部分.
我创建了一个Java桌面应用程序(使用Swing),现在我尝试通过使用JNLP从网络启动它来使其工作.当我从终端启动它时,应用程序工作正常,但是一旦我从JNLP启动它,它就不会关闭.我每次都要手动杀死进程.
我读到如果我JFrame将其DISPOSE_ON_CLOSE用作默认关闭操作可能会出现问题,但事实并非如此.它使用DO_NOTHING_ON_CLOSE(隐含地).此外,我System.exit(0)在释放所有对象后明确调用:
f = new JFrame("Pacman");
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
// Terminate the Game-loop:
GameLoop.INSTANCE.stopLoop();
// Close the application:
System.exit(0);
}
});
Run Code Online (Sandbox Code Playgroud)
我想在关闭应用程序时可能会抛出一个异常,但我无法找到一种方法来获取正在运行的应用程序的控制台输出(例如Stack-Trace)以JNLP启动.这是我试过的:
javaws调试参数开始并连接jconsole(工作但我找不到任何异常或控制台输出).javaws调试参数开始,并将IntelliJ调试器附加到它(也可以,但不会给我任何输出)那么,我如何使用JNLP启动应用程序并获取输出(写入默认的输出和错误流),就好像我会使用普通的桌面应用程序一样?
我们在Tomcat6上启用了基本身份验证.用户在浏览器中进行身份验证,然后启动JNLP以在Java Web Start中启动应用程序.在启动时,java web start尝试从服务器下载jar文件,但它没有使用已经过浏览器验证的同一会话.基于论坛,我试图通过使用sid属性在JNLP中传递会话ID,并在URL中附加.环境受到限制,因此每个请求都需要进行身份验证,我们不能说要排除对未经过身份验证的jar文件的请求.下面是我的JSP创建JNLP文件,任何人都可以请求帮助我们如何继续相同的会话下载已经被浏览器验证的jar.
<% response.setContentType("application/x-java-jnlp-file"); %>
<%= "<?xml version=\"1.0\" encoding=\"utf-8\"?>" %>
<!-- JNLP File for SimpleTableDemo -->
<%
String baseURL = request.getRequestURL().toString().replace(request.getRequestURI(), request.getContextPath());
%>
<jnlp codebase="<%=baseURL%>">
<information>
<title>Simple Table Demo Application</title>
<vendor>Try</vendor>
<description>SimpleTableDemo</description>
<description kind="short">An application that demonstrates a simple table.</description>
</information>
<resources>
<j2se version="1.6+" />
<property name="sid" value="<%=request.getSession().getId()%>" />
<property name="serviceHost" value="<%=request.getServerName()%>"/>
<property name="servicePort" value="<%=request.getServerPort()%>"/>
<jar href="AuthenticateJNLPJars.jar;JSESSIONID=<%=request.getSession().getId()%>" />
</resources>
<application-desc main-class="SimpleTableDemo" >
</application-desc>
</jnlp>
Run Code Online (Sandbox Code Playgroud) 要求是自动化java webstart进程.单击JNLP文件后,加载并显示下面的图像

这里始终没有信任的选择.我知道在Java 7 Update 51中,java收紧了安全性.所以我签署了由赛门铁克提供的公共代码签名证书的罐子,因此不需要在java控制面板例外列表中添加此站点或降低安全级别(两者都不允许在客户环境中).有没有可能让这个安全问题消失并自动运行罐子?
解
在MANIFEST.MF中添加了以下两个属性,并且它有效.
Codebase: *
Application-Library-Allowable-Codebase: *
Run Code Online (Sandbox Code Playgroud) 在尝试根据传递给HTTP服务器的URL参数动态生成JNLP文件时,我注意到了一件奇怪的事情.如果我的HTML代码中有这样的东西,它可以工作:
<embed type="application/x-java-applet;" launchjnlp="dummy.jnlp"/>
Run Code Online (Sandbox Code Playgroud)
另一方面,如果我%在launchjnlp属性中有一个字符,插件根本不会做任何事情:
<embed type="application/x-java-applet;" launchjnlp="dummy%3f.jnlp"/>
Run Code Online (Sandbox Code Playgroud)
没有错误消息,没有默认的Java启动画面,没有,它默默地失败.(甚至没有尝试检索JNLP文件.)
这是某种安全功能吗?如果是的话,它应该防范什么?
或者它可能是一个直截了当的错误?
更新:使用%实体而不是%符号也不起作用.
更新2:我尝试但未能找到有关该launchjnlp属性的确切语义的任何文档,但整个标记由deployJava.launchWebStartApplication(jnlp)生成,这应该是从浏览器启动Web Start应用程序的"官方"方式.
更新3:只是对此非常清楚:上面的例子只是:一个例子.您可以使用绝对任何 URL(相对,绝对,file://,http://,您为其命名),任何 URL编码的字符,甚至无效的转义序列来观察所描述的行为(尽管在这种情况下它更多或不太合理),实际JNLP文件的存在与否是无关紧要的,因为我们甚至没有达到插件试图加载JNLP文件的程度.