我遇到了这个问题,并且已经进行了几天不成功的搜索和解决方法尝试.
我现在有一个由jnlp/webstart在osx和windows计算机上分发的内部java swing程序,除其他外,它从WebDav下载一些文件.
最近,在使用OSX 10.8和Java 7的测试机器上,带有重音字符的文件名和目录名称开始将其替换为问号.
使用7之前的Java版本的OSX没问题.
例如:
XXXYYY_è_ABCD/
变
XXXYYY _?_ ABCD /
在原始字符串上使用java.text.Normalizer(NFD,NFC,NFKD,NFKC),结果不同但仍然错误:
XXXYYY_e?_ABCD /
要么
XXXYYY_e_ABCD /
我知道,来自oracle.com的[andrew.brygin]和[mik3hall at gmail.com]之间的通信
是的,file.encoding是根据运行jvm的语言环境设置的,如果你在xxxx.UTF-8语言环境中运行java vm,file.encoding应该是UTF-8,设置为MacRoman会有问题.所以我相信Oracle/OpenJDK7的行为正确.也就是说,正如Andrew Thompson指出的那样,如果所有以前的Apple JDK版本都使用MacRoman作为英文/ UTF-8语言环境的file.encoding,那么这里存在"兼容性"问题,可能值得在发行说明中加入一些内容Oracle/OpenJDK MacOS用户抬头.
来自Joni Salonen博客(java-and-file-names-with-invalid-characters)我知道:
您可能知道Java使用"默认字符编码"将二进制数据转换为字符串.要使用其他编码读取或写入文本,可以使用InputStreamReader或OutputStreamWriter.但是对于API深处的数据到文本转换,您别无选择,只能更改默认编码.
和
那么file.encoding呢?
file.encoding系统属性还可用于设置Java用于I/O的默认字符编码.不幸的是,它似乎对如何将文件名解码为字符串没有影响.
从jnlp内部执行locale不变地打印
LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)
stackoverflow与解决方案最相似的问题是: encoding-issues-on-java-7-file-names-in-os-x
但解决方案是将java程序的执行包装在一个脚本中
#!/bin/bash
export LC_CTYPE="UTF-8" # Try other options if this doesn't work
exec java your.program.Here
Run Code Online (Sandbox Code Playgroud)
但是我不认为因为webstart而我可以使用这个选项,而且我还没有找到任何方法来从程序中设置LC_CTYPE环境变量.
任何解决方案或解决方法?
PS:
如果我们直接从shell运行程序,它甚至可以在OSX 10 + Java 7上正确写入文件/目录.问题只出现在JNLP + OSX + Java7的组合中
要启动我们的遗留应用程序,我们通过jnlp使用java WebStart.
我们希望支持64位Java客户端,但我们的一个库是依赖于体系结构的.
我们想过做的事情:
<resources>
<j2se version="1.6+" sun.arch.data.model="64"/>
<jar href="/apps/swt-3.7M5-win32-win32-x86_64_s.jar" download="eager" />
</resources>
<resources>
<j2se version="1.6+" />
<jar href="/apps/swt-3.7M5-win32-win32-x86_s.jar" download="eager" />
</resources>
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为参数sun.arch.data.model ="64"用于设置参数而不是对其进行测试.
有任何想法吗?
今天我将Java版本更新为7u51.安装完成后,我清除了Java Cache,浏览器的Cache,并登录到一个安全的网站,该网站使用Applet为用户提供某些附加服务.
小程序不再工作了.我访问了http://www.java.com来检查在Internet Explorer中检测到的Java版本,并且java网站说:
We are unable to verify if Java is currently installed and enabled in your browser.
Run Code Online (Sandbox Code Playgroud)

其他浏览器可以检查Java,并且提到的applet按预期工作:

由于applet在其他浏览器中按预期工作,我可以假设问题不是Applet及其部署文件/进程,而是JRE 7u51与IE 11的兼容性.我想知道是否有任何解决方法.
作为额外措施,我使用java.com工具卸载任何以前和不安全的JRE版本(使用谷歌浏览器).在仔细检查IE 11之后,我可以看到Java Addons已启用并版本化为7u51:

我知道IE已经得到了改进; 即便如此,我们建议客户使用谷歌浏览器或Firefox,因为这些浏览器已证明与我们的网络应用程序更兼容.不幸的是,由于对程序使用等的共同组织限制,我们无法强迫客户使用某些浏览器.
在此先感谢您的帮助.
更新(2014年1月20日):
以下屏幕截图显示了为"java.com"配置了兼容性视图的Internet Explorer 11.在这种情况下,它无法解决问题.

我正在尝试加载jnlp文件.但是我有以下错误:Could not read or parse JNLP file.我已经读过这个问题可能会从Mozilla的首选项中修复:编辑 - >首选项 - >应用程序 - >"Java Web Start应用程序".但是我的应用程序中没有"Java Web Start应用程序"部分(我已经安装了icedtea-netx但在Application窗口中没有出现任何内容).我正在使用Linux薄荷.谁能告诉我怎么办?我参考的解决方案在这个论坛中:https://askubuntu.com/questions/91897/first-time-using-java-web-start-in-ubuntu-fatal-launch-exception
编辑:这是我的错误:
net.sourceforge.jnlp.LaunchException: Fatal: Read Error: Could not read or parse the JNLP file.
at net.sourceforge.jnlp.Launcher.fromUrl(Launcher.java:491)
at net.sourceforge.jnlp.Launcher.launch(Launcher.java:283)
at net.sourceforge.jnlp.runtime.Boot.run(Boot.java:211)
at net.sourceforge.jnlp.runtime.Boot.run(Boot.java:53)
at java.security.AccessController.doPrivileged(Native Method)
at net.sourceforge.jnlp.runtime.Boot.main(Boot.java:177)
Caused by: java.io.IOException: Connection timed out
at net.sourceforge.jnlp.JNLPFile.openURL(JNLPFile.java:282)
at net.sourceforge.jnlp.JNLPFile.<init>(JNLPFile.java:212)
at net.sourceforge.jnlp.JNLPFile.<init>(JNLPFile.java:188)
at net.sourceforge.jnlp.JNLPFile.<init>(JNLPFile.java:173)
at net.sourceforge.jnlp.JNLPFile.<init>(JNLPFile.java:159)
at net.sourceforge.jnlp.Launcher.fromUrl(Launcher.java:477)
... 5 more
Caused by:
java.io.IOException: Connection timed out
at net.sourceforge.jnlp.JNLPFile.openURL(JNLPFile.java:282)
at net.sourceforge.jnlp.JNLPFile.<init>(JNLPFile.java:212)
at …Run Code Online (Sandbox Code Playgroud) 为了保护我们的用户不受appiulet小程序的影响,我想禁用Java浏览器插件.
在测试(JRE 7)中,我注意到停用插件也会禁用Java Web Start.我们需要使用一个Web Start应用程序,因此似乎我们别无选择,只能启用浏览器插件.
这是正确的,还是有办法在不启用浏览器插件的情况下使用Web Start?
测试步骤:
在命令窗口中,我输入以下命令
出现以下错误框:

它的消息转化为
无法下载此应用程序,因为已停用Java over Internet.您可以通过Java控制面板在此系统上激活Java
我还没有看到在Java控制面板中激活"Java over Internet"的选项.当我启用浏览器插件时,可以启动Java Web Start应用程序.
如果我执行JNLP文件的本地副本,则会出现相同的错误消息
加哇人
<path to local jnlp file>
jnlp文件(略微清理):
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="https://example.com/path/to/" href="webstartapp.jnlp">
<information>
<title>...</title>
<vendor>...</vendor>
<homepage href="..." />
<description>...</description>
<description kind="short">...</description>
<description kind="tooltip">...</description>
<offline-allowed />
</information>
<security>
<all-permissions />
</security>
<resources>
<j2se version="1.7+" initial-heap-size="128m" max-heap-size="256m" />
<jar href="Client/lib/Launcher.jar" main="true" />
</resources>
<application-desc main-class="com.veda.launcher.Start">
<argument>...</argument>
<argument>*</argument>
</application-desc>
</jnlp>
Run Code Online (Sandbox Code Playgroud) 我有一个ASP.NET站点,它提供了用于启动Java Web Start应用程序的JNLP文件.我已将它们设置为标签中的hrefs <a>以下载它们.我从不同浏览器获得的行为有所不同:
Chrome是Chrome,我几乎放弃了希望,但Edge可以设置为启动JNLP文件而不是提供"打开/显示下载"栏吗?
我在appliation的jnlp描述符中使用快捷方式标记为我的应用程序创建桌面链接和菜单项.
如果这些快捷方式在客户端上被删除 - 如何在没有用户操作的情况下自动重新安装?是否有jnlp文件的配置选项?
(顺便说一句,我使用的是java6)
我在过去的6个月里一直致力于一个项目.对于这个项目,我有一个glassfish服务器实例,其中部署了webservice.在客户端,我正在使用JavaFX2.2,它使用BASIC身份验证对Jersey(XML请求/响应,没有JSON)执行REST请求.
当用户启动程序(JWS/JNLP)时,通常他们只需在自己的登录窗口中输入他们的凭据,按下登录按钮并开始工作.但是从7u21开始,由于某种原因,我得到了额外的Java"需要身份验证"弹出窗口(可能是因为7u21中的安全性已经改变).

为了确保它与Java版本之间的兼容性问题无关,我还将服务器更新为7u21,因此:
如果我点击上面显示的"需要验证"窗口中的取消按钮,程序会启动,但在执行请求时它不会运行稳定:
java.io.IOException: stream is closed
file:/D:/NetBeansProjects/MIT_20130516/CL_KenoM/dist/CL_KenoM.jar!/GUI/cow/ListCow.fxml
at com.sun.jersey.api.client.ClientResponse.close(ClientResponse.java:615)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:570)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:535)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:696)
at com.sun.jersey.api.client.WebResource.access$300(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:512)
at DA.CowsClient.getCowsByUserId(CowsClient.java:96)
at GUI.cow.ListCowController.initialize(ListCowController.java:728)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2152)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2028)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2744)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2723)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2709)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2696)
at Classes.Context.showContentPane(Context.java:186)
at GUI.user.ListUserController.openAddData(ListUserController.java:389)
at GUI.user.ListUserController.access$100(ListUserController.java:55)
at GUI.user.ListUserController$8.handle(ListUserController.java:657)
at GUI.user.ListUserController$8.handle(ListUserController.java:652)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:69)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:33)
at javafx.event.Event.fireEvent(Event.java:171)
at javafx.scene.Scene$ClickGenerator.postProcess(Scene.java:3117)
at javafx.scene.Scene$ClickGenerator.access$8600(Scene.java:3055) …Run Code Online (Sandbox Code Playgroud) 我想将Web登录会话转移到我的java桌面应用程序,这样我再也不想登录我的桌面应用程序了.
一旦用户登录我的Web应用程序,我在用户系统上设置了一些cookie,一旦他启动我的独立应用程序,我想使用此处存储的凭据将我的用户登录到应用程序而无需重新登录.
我的问题: - 我可以访问cookie来读取Auth令牌和其他参数吗?这是正确的解决方案吗? - 要达到上述要求,是否有适当的解决方案.
Cookie在这里似乎是我的解决方案.但实质上,我希望在Web应用程序和独立应用程序之间实现无缝集成.有什么样的解决方案可用于此?
现在我找到了 2 种可能的解决方案来创建 Jenkins Slaves 或 Jenkins Workers:
我现在的问题是:什么是更好/更稳定的解决方案,为什么?
我发现自己使用这两种解决方案都有一些优点和缺点,但我不想影响讨论
jnlp ×10
java ×8
applet ×2
32bit-64bit ×1
c# ×1
code-signing ×1
cookies ×1
execution ×1
java-7 ×1
jenkins ×1
jersey ×1
launch ×1
linux ×1
linux-mint ×1
macos ×1
rest ×1
security ×1
ssh ×1
web-services ×1