根据Java web start,jar文件在客户端机器上下载了什么?
嗨,我正在尝试从Java Webstart应用程序中保存文件.
public class Main {
public static void main(String[] args) {
try {
FileSaveService fos = (FileSaveService) ServiceManager.lookup("javax.jnlp.FileSaveService");
//open Dialog
FileContents fc = fos.saveFileDialog("c:/data", null, new ByteArrayInputStream("Hallo Welt".getBytes()), "name.txt");
System.out.println("FileContents: " + fc);
} catch (UnavailableServiceException e) {
System.err.println("***" + e + "***");
} catch (IOException e) {
System.err.println("***" + e + "***");
}
//wait a minute
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
System.exit(0);
}
}
Run Code Online (Sandbox Code Playgroud)
一切正常,除了出现的对话框看起来像一个"打开"文件对话框,而不是像"保存"文件对话框:

任何帮助,将不胜感激.
我已经尝试过所有方法
运行应用程序
1)javaws -J-Xdebug -J-Xrunjdwp:transport = dt_socket,server = y,suspend = n,address = 9123 My.jnlp
2)在JAVA_TOOL_OPTIONS中设置相同的选项
3)在JAVAWS_VM_ARGS中设置相同的选项
4)在Java控制面板中设置相同的选项(不带-J)
尝试使用或不使用Xnoagent时使用相同的选项
每一个方式,在我尝试从eclipse连接后这样做 - 它无法连接.当我做netstat -a时 - 它没有显示任何人在9123上收听.
我在Windows 10上
我有一个JNLP applet,它运行在安装了32位和64位JVM的64位计算机上.JNLP必须在64位JVM上运行才能正确执行.有没有办法强制使用64位JVM?
该选项打包JNLP作为一个应用程序不会出现在甲骨文的JDK 7 Java首页存在,因为它在苹果所做的陈述在这里
OS X桌面与Java Web Start的集成允许用户从任何Java Web Start应用程序创建本地应用程序包.Java Preferences中的Shortcut Creation设置控制在打开Java Web Start应用程序时是否提示用户创建应用程序包.捆绑的Java Web Start应用程序具有本机应用程序包的所有优点,在"OS X应用程序包"中对此进行了描述.
为了解决这个问题,我使用Automator创建一个.app,它运行一个执行JNLP的shell脚本.这允许我使用应用程序图标,但我所有配置停靠图标的尝试都失败了.
我尝试使用iconutil并添加到该Resources文件夹创建.icns文件,然后Contents/Info.plist在该字段下指定.icns文件,"Icon File"但在运行应用程序时我仍然在Dock中获得java咖啡杯图标.
我尝试过的另一件事是将-Xdock:icon=icon.jpg参数传递给javaws但是这看起来只适用于常规的java程序.
以下代码摘自核心Java卷1的java Web start章节.
ByteArrayOutputStream out = new ByteArrayOutputStream();
PrintStream printOut = new PrintStream(out);
printOut.print(panel.getText());
//panel.getText() return a String
InputStream data = new ByteArrayInputStream(out.toByteArray());
FileSaveService service = (FileSaveService) ServiceManager
.lookup("javax.jnlp.FileSaveService");
service.saveFileDialog(".", new String[] { "txt" }, data, "calc.txt");
Run Code Online (Sandbox Code Playgroud)
创建了四个对象,流重定向三次.有没有其他方法可以使用jnlp api将数据写入文件?InputStream和ByteArrayInputStream之间有什么区别?
我有一个内部唯一的应用程序,我历史上自签名.使用最新版本的Java,不推荐使用JNLP的自签名.我也遇到过使用Java 7U25从自签名应用程序打开套接字的奇怪问题(但是当从命令行作为普通jar运行时工作正常).
有没有办法在没有签名的情况下进行JNLP?鉴于它是一个内部唯一的应用程序,签署是没有必要的(对我来说).当真的没必要时,我真的不想花钱购买证书.
我是JavaFx的新手.我发现每个教程都使用NetBeans IDE for JavaFx.但我正在使用Eclipse.我在Eclipse中学习并开发了许多独立的javafx应用程序,但现在我想开发在浏览器上运行的JavaFx应用程序(与applet相同).我搜索过但发现所有材料都只使用NetBeans IDE而不是eclipse.当我们选择Project Properties中的Run in Browser选项时,NetBeans会自行生成jnlp,jar和html文件.对于Eclipse IDE,我该怎么办?我在eclipse中为Javafx使用e(fx)clipse插件.请尽快提供一些资料
我有一个JNLP,它在Java 1.7下为我的应用程序创建了一个桌面快捷方式.但是,当我在Java 1.8下运行它时,我不再获得桌面快捷方式.发生了什么变化?
这是我在Windows XP,Windows 7和OS X Yosemite下测试的一个示例,它们都运行Java 1.7并且它为这三个创建了桌面快捷方式,但是在运行Java 1.8的Windows 7和Windows 8上我都没有得到桌面快捷方式.为了清楚起见,该应用程序显示并正常工作,只是没有创建桌面快捷方式.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jnlp PUBLIC "-//Sun Microsystems, Inc.//DTD JNLP 1.5//EN" "http://www.netbeans.org/jnlp/DTD/jnlp.dtd">
<jnlp codebase="http://services.SportsOptions.com/test/" href="test.jnlp">
<information>
<title>test</title>
<vendor>test.com</vendor>
<homepage href="http://www.test.com/"/>
<description>Test</description>
<icon href="splash.png" kind="splash"/>
<offline-allowed/>
<shortcut online="true">
<desktop/>
<menu submenu="test" />
</shortcut>
</information>
<information os="Linux">
<icon href="DesktopIcon.ico" kind="shortcut" />
</information>
<information os="Windows">
<icon href="DesktopIcon.ico" kind="shortcut" />
</information>
<information os="Mac">
<icon href="DesktopIcon.icns" kind="shortcut" />
</information>
<resources locale="" os="">
<j2se href="http://java.sun.com/products/autodl/j2se" initial-heap-size="32m" max-heap-size="512m" version="1.6+"/>
<jar download="eager" href="Test.jar" main="false" version=""/>
</resources> …Run Code Online (Sandbox Code Playgroud) 现在的情况
我们目前使用applet执行一些操作,然后重定向当前页面.在其核心中,您可以看到applet如下:
public class ExampleApplet extends Applet {
@Override
public void init() {
Button redirect = new Button("Redirect");
this.add(redirect);
final String target = this.getParameter("targetPage");
redirect.addActionListener((ActionEvent e) -> {
try {
getAppletContext().showDocument(new URL(target), "_parent");
} catch (MalformedURLException ex) {}
});
}
}
Run Code Online (Sandbox Code Playgroud)
以最简单的方式调用applet:
<applet code="com.example.applet.ExampleApplet.class" archive="${appletUrl}" width="100" height="30">
<param name="targetPage" value="http://localhost:8080/applet/"/>
</applet><br/><br/>
Run Code Online (Sandbox Code Playgroud)
其中${appletUrl}返回applet JAR的位置.
所以applet只不过是一个调用getAppletContext().showDocument(new URL(target), "_parent");刷新当前页面的简单按钮.这已经很长时间正确地完成了它的工作.现在这是问题所在.
移民
众所周知,Chrome不支持Applets.从那时起搁置一段时间IE并FireFox仍然支持他们.在2016年底,他们也将不再支持他们.所以我们决定使用JWS和迁移applet JNLP.
迁移此简单重定向按钮示例将提供以下html代码段和JNLP文件:
<a href="${jnlpUrl}">Launch JNLP</a> …Run Code Online (Sandbox Code Playgroud)