作为程序员和最终用户,您认为哪个更好?为什么?
我的webstart应用程序遇到麻烦,想看看stdout.我认为这是一个例外...但我无法看到它,因为控制台输出隐藏在某处.
如何获得应用程序的输出?
我正在使用名为BLAST2GO的Java webstart应用程序,我遇到内存分配问题.它需要将大型数据集加载到内存中,所以我一直在尝试为此应用程序分配3-6GB.但是,无论我设置为最大堆大小,它总是使用455MB(如消息栏所示:'内存使用:xxMB为455MB').我已经尝试将其设置为非常合理的级别(1024 MB),但仍然只有455MB的分配.
有任何想法吗?
顺便说一下,我正在使用Ubuntu 10.04 32位,24GB内存,8个触发器.
更新:这是他们提供的JNLP.当我编辑initial-heap-size和max-heap-size属性的值时,我得到相同的结果.
<jnlp spec="1.0+" codebase="http://bioinfo.cipf.es/blast2go/webstart" href="http://bioinfo.cipf.es/blast2go/webstart/makeJnlp.php?mem=3072">
<information>
<title>Blast2GO 3072M</title>
<vendor>CIPF - UPV - IVIA</vendor>
<homepage href="http://www.blast2go.org"/>
<description>Blast2GO 3072M</description>
<description kind="short">Blast2GO 3072M</description>
<icon href="splash.gif"/>
<offline-allowed/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.5+" initial-heap-size="64m" max-heap-size="3072M"/>
<jar href="ext/blast2go.jar"/>
<jar href="ext/biojava-1.3.1.jar"/>
<jar href="ext/jfreechart-1.0.10.jar"/>
<jar href="ext/mysql-connector-java-3.0.11-stable-bin.jar"/>
<jar href="ext/zvtm.jar"/>
<jar href="ext/jakarta-regexp-1.4.jar"/>
<jar href="ext/jcommon-1.0.13.jar"/>
<jar href="ext/Simpat1.1.jar"/>
<jar href="ext/iText-2.1.1.jar"/>
<jar href="ext/jdom/activation.jar"/>
<jar href="ext/jdom/ant.jar"/>
<jar href="ext/jdom/jaxen-core.jar"/>
<jar href="ext/jdom/jaxen-jdom.jar"/>
<jar href="ext/jdom/jdom.jar"/>
<jar href="ext/jdom/mail.jar"/>
<jar href="ext/jdom/saxpath.jar"/>
<jar href="ext/jdom/xalan.jar"/> …Run Code Online (Sandbox Code Playgroud) 场景:服务器为许多不同(但经过身份验证的)客户端提供相同的Webstart Applet.每个Applet都必须"知道"它所在的客户端.因此,服务器必须能够将一些参数传递给客户端,然后由该客户端上运行的Applet读取.
编辑:也许Webstart Applet是一个错误的术语.我的意思是只是一个Webstart客户端应用程序.
我有JNLP的问题.
当计算机安装了两个Java版本时,64位和32位.计算机默认执行32位版本.
而捷径就是
C:\Windows\SysWOW64\javaws.exe -localfile
"C:\Users\Micro\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\43\b9706ab-6de97627"
Run Code Online (Sandbox Code Playgroud)
如何通过C:/Windows/System32/javaws.exe独立的Java版本强制执行快捷方式?
我最近在通过JNLP启动我的应用程序时偶然发现了一个问题.我现在把它缩小到一个java.security.AccessControlException,否认我关闭我的ExecuterService.
所以,我做了一些阅读,发现我需要权限(modifyThread)才能成功关闭服务.我还发现我应该使用<security>-tag(在JNLP文件中)来请求它,但我对如何使用有点困惑.
[...]如果
all-permissions指定了元素,则应用程序将具有对客户端计算机和本地网络的完全访问权限.如果应用程序请求完全访问权限,则必须对所有JAR文件进行签名.该用户将被提示 [...]
从阅读本文来看,在我看来,我可以选择获得全部或无权限......这似乎是一个令人困惑的实现.因为我只需要一个关闭我的服务.
我也阅读了这篇文章,告诉我不应该请求所有权限,因为我会打开用户计算机以获取恶意代码.
那么,有没有办法指定我只需要特定的权限(modifyThread),因此我不需要签署我的jar?或者我是否必须使用"签署我的罐子并请求一切" - 接近?
我有一个PVK和SPC文件,并希望使用它们来签署Netbeans IDE 7.3中的jar文件.我的应用程序将从Java Web Start部署.
我使用keytool将它们组合成一个PFX文件.
"C:\ Program Files\Microsoft SDKs\Windows\v7.1\Bin\pvk2pfx.exe"-pvk joy.pvk -spc joy.spc -pi happy -pfx joyful.pfx
我找到了别名.
"C:\ Program Files\Java\jdk1.7.0_17\bin\keytool"-v -list -storetype pkcs12 -keystore joyful.pfx> abc.txt
然后我从这个Comodo 链接的步骤将pfx转换为Java Keystore
"C:\ Program Files\Java\jdk1.7.0_17\bin\keytool"-importkeystore -srckeystore joyful.pfx -srcstoretype pkcs12 -destkeystore joyful.jks -deststoretype JKS
IDE(项目属性|部署|签名证书)要求提供密钥库路径,密码,密钥别名和密钥密码.我填写它.
现在我做了一个干净的构建,但注意到这个消息:
警告:未验证签名者的证书链.
我做错了什么?
我是业余程序员.我创建了一个由单个自签名jar文件组成的应用程序.该应用程序将仅供我的数学课程中的学生使用,因此我认为自签名是可以的.
我按照Oracle的说明对jar进行了签名,然后使用jarsigner工具来验证jar.据说,这很好.
在.jnlp文件中,我包含了具有所有权限的安全标记:
<security>
<all-permissions/>
</security>
Run Code Online (Sandbox Code Playgroud)
但是,当程序启动时,我从未看到提示用户接受证书或要求在客户端计算机上运行某种权限的对话框.根据Oracle文档,根据我的理解,我应该看到这样的对话框.
我在stackoverflow上读过这个页面:
我有一个类似的情况,我得到一个安全例外.在我的情况下,当应用程序尝试显示filechooser对话框时抛出异常:
java.security.AccessControlException: access denied (java.util.PropertyPermission user.home read)
Run Code Online (Sandbox Code Playgroud)
这是因为从未要求用户提供权限.我相信我遵循了stackoverflow页面上的建议,但它似乎对我不起作用.这就像jar似乎是无符号的.我甚至尝试删除所有权限标记并获得完全相同的行为.
我查看了jar内部,我可以看到两个必需的文件在那里:MYKEY.DSA和MYKEY.SF.我查看了可读的(.SF)内部,它包含应该存在的文本.我相信这是所有罐子需要才能签署.
所以这是我的问题:
1)关于应用程序,.DSA和.SF文件的名称是什么?目前他们只有我用keytool的别名.
2)如果我的服务器上的java版本是1.7而我的开发计算机上的java版本是1.6,那有关系吗?我需要在1.6中编译,因为我们学校还没有升级到1.7,所以当它在客户端计算机上运行时需要为1.6.
3)当我从终端运行时,有没有办法确定我正在使用哪个版本的jarsigner?我尝试过jarsigner -version,但这不是其中一个选项.我注意到MYKEY.SF文件的顶部如下所示:
Signature-Version: 1.0
Created-By: 1.4.2-02 (Blackdown Java-Linux Team)
SHA1-Digest-Manifest: OHMs6w/CQlG3MVYNxC7l1vTWdZw=
Name: org/arps/tranz/TranzActionMap.class
SHA1-Digest: dSI3RKfgUrRHbwnZLyXbkiJLWdU=
Run Code Online (Sandbox Code Playgroud)
这是否意味着实际上有一些旧版本的jarsigner在运行?我不认为Java 1.4仍然在我的电脑上.无论如何,我的jarsigner版本似乎创建了与此处所见相同的文件类型:
http://docs.oracle.com/javase/tutorial/deployment/jar/intro.html
我不知道1.6 jarsigner或1.7 jarsigner创建的文件是否有任何不同,或者它是否重要.
4)如果jarsigner的版本是罪魁祸首,我如何强制从终端(Ubuntu)运行更新版本的jarsigner?
谢谢你的帮助.正如我在开始时所说,我是一名业余程序员.我真正想做的就是为下周的课程做好准备.
更新:
在使用无法找到libjli.so的jar工具挣扎了很长时间后,我现在已成功使用1.6 jar工具和jarsigner工具,因此MYKEY.SF文件的顶部如下所示:
Signature-Version: 1.0
SHA1-Digest-Manifest-Main-Attributes: DGUFMaJYirZi//67NI+M5RVi63k=
Created-By: 1.6.0_03 (Sun Microsystems Inc.)
SHA1-Digest-Manifest: ZPS3aOyPW/tymxbGdfe4/qBVK/g=
Run Code Online (Sandbox Code Playgroud)
但我仍然得到相同的行为,应用程序开始启动而不要求用户接受证书.所以现在我的主要问题是:
当我的服务器运行1.7时,jar是用1.6创建的吗?
我不知道服务器上实际发生了多少java活动.在某些时候,它切换到客户端计算机,但我假设jnlp的一部分首先发生在服务器上.
我需要通过打开浏览器窗口来调试由另一个Java应用程序(webstart)启动的applet.它适用于旧版本的java,但是对于Java 1.7_45,调试仅适用于第一个JVM(即webstart应用程序).
我在jcontrol中使用这些参数:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8086
Run Code Online (Sandbox Code Playgroud)
我认为这没有错,因为调试器正确连接.唯一的问题是,我只能调试webstart应用程序而不是之后运行的applet.
在webstart应用程序和applet的控制台中显示:
Java Plug-in 10.45.2.18
Using JRE version
1.7.0_45-b18 Java HotSpot(TM) 64-Bit Server VM
Run Code Online (Sandbox Code Playgroud)
JNLP java进程以agentlib我在jcontrol中设置的选项开始:
/usr/lib/jvm/java-7-oracle/jre/bin/java -Xmx512m -Xms128m
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8086
-Xbootclasspath/a:/usr/lib/jvm/java-7-oracle/jre/lib/javaws.jar:/usr/lib/jvm/java-7-oracle/jre/lib/deploy.jar:/usr/lib/jvm/java-7-oracle/jre/lib/plugin.jar
-classpath /usr/lib/jvm/java-7-oracle/jre/lib/deploy.jar
-Djnlpx.vmargs="-Xmx512m -Xms128m
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8086"
-Djnlpx.jvm=/usr/lib/jvm/java-7-oracle/jre/bin/java
....
Run Code Online (Sandbox Code Playgroud)
当我打开一个applet我想从这个webstart应用程序进行调试时,会打开firefox中的新选项卡并启动三个进程:
/opt/firefox/plugin-container /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so -greomni /opt/firefox/omni.ja -appomni /opt/firefox/browser/omni.ja -appdir /opt/firefox/browser 13665 true plugin
/usr/lib/jvm/java-7-oracle/jre/bin/java -D__jvm_launched=8315888593 -D__applet_launched=8315738716 -Xbootclasspath/a:/usr/lib/jvm/java-7-oracle/jre/lib/deploy.jar:/usr/lib/jvm/java-7-oracle/jre/lib/javaws.jar:/usr/lib/jvm/java-7-oracle/jre/lib/plugin.jar -Djava.class.path=/usr/lib/jvm/java-7-oracle/jre/classes -Dsun.awt.warmup=true sun.plugin2.main.client.PluginMain write_pipe_name=/tmp/.com.sun.deploy.net.socket.13900.6946726655044877700.AF_UNIX
/usr/lib/jvm/java-7-oracle/jre/bin/java -D__jvm_launched=8317712180 -D__applet_launched=8315738716 -Xbootclasspath/a:/usr/lib/jvm/java-7-oracle/jre/lib/deploy.jar:/usr/lib/jvm/java-7-oracle/jre/lib/javaws.jar:/usr/lib/jvm/java-7-oracle/jre/lib/plugin.jar -Djava.class.path=/usr/lib/jvm/java-7-oracle/jre/classes -Djnlpx.session.data=/tmp/session6916520025949955515 -Dsun.awt.warmup=true sun.plugin2.main.client.PluginMain write_pipe_name=/tmp/.com.sun.deploy.net.socket.13900.3102318208570708149.AF_UNIX
Run Code Online (Sandbox Code Playgroud)
如您所见,调试端口不作为参数传递给执行applet的命令
我试图向applet标签添加新的调试参数(我已尝试过Xdebug和agentlib),但它什么也没做:
<param name="java_arguments" value="-Djnlp.packEnabled=true -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8087">
Run Code Online (Sandbox Code Playgroud)
我也试过使用appletviewer,在解决了pack200库的问题之后,我坚持这个例外:
java.lang.NoClassDefFoundError: netscape/javascript/JSException
at java.lang.Class.getDeclaredConstructors0(Native Method)
Run Code Online (Sandbox Code Playgroud)
但我不认为这是一个解决方案,因为appletviewer不能与pack200一起工作,我必须将重复的库添加到服务器.
是否有可能:
首先,对不起我的英语,这不是我的母语.
我的环境有:
- jre 1.5.0_12(二进制文件)
- jre 1.6.0_17(默认jre)
- jre 1.7.0_45(二进制文件)
我有两种方法可以通过Java Webstart启动应用程序:
1)\\<network filesystem>\javaws-1.5.0_12.exe \\<network filesystem>\urClient-DAP2.jnlp
2)"C:\Program Files\Java\jre1.5.0_12\bin\javaws.exe" "http://some-server.com/EU10.jnlp"
在安装Java 1.7之前,没问题.
但是因为我安装了JRE 1.7(只有二进制文件,并在注册表中注册),所以第二种方式不想下载JAR并执行应用程序.我只有Java启动画面 - "Java Loading"出现然后在大约20秒内消失.
我找到了两个解决方法:
- 禁用或卸载JRE 1.7
- 或者最奇怪的方法:启用java控制台 ....(deployment.console.startup.mode=SHOW)
我被卡住了,这两个变通办法都不可行......
编辑: 在javaws跟踪中我得到了这个例外:
`Exception in thread "javawsApplicationMain" java.lang.NullPointerException
at javax.swing.SwingUtilities.appContextGet(Unknown Source)
at javax.swing.UIManager.getLAFState(Unknown Source)
at javax.swing.UIManager.maybeInitialize(Unknown Source)
at javax.swing.UIManager.getLookAndFeel(Unknown Source)
at com.sun.deploy.util.DeployUIManager.setLookAndFeel(Unknown Source)
at com.sun.javaws.ui.DownloadWindow.buildIntroScreen(Unknown Source)
at com.sun.javaws.Launcher.downloadResources(Unknown Source)
at com.sun.javaws.Launcher.handleApplicationDesc(Unknown Source)
at com.sun.javaws.Launcher.handleLaunchFile(Unknown Source)
at com.sun.javaws.Launcher.run(Unknown Source)
at java.lang.Thread.run(Unknown …Run Code Online (Sandbox Code Playgroud) java ×10
java-web-start ×10
jnlp ×4
applet ×3
security ×2
certificate ×1
debugging ×1
jar ×1
jar-signing ×1
memory ×1
stdout ×1