标签: java-web-start

从网站启动桌面应用程序

通过浏览器/ URL启动应用程序是否可行?这样做有哪些选择?

我知道用IE和Windows做这件事的方法(通常不起作用).理想情况下,我希望这与浏览器无关.

我们的应用程序是RCP,因此理论上Java Web Start可以工作,我们只需要对我们如何向用户提供应用程序进行一些重大更改,我想避免这些更改.如果有所不同,我们的Web服务器代码目前都是Java.

我几乎放弃了这个,直到我点击苹果网站上的网址,然后又推出了iTunes.

Apple如何做到这一点?

javascript java deployment url java-web-start

7
推荐指数
1
解决办法
1915
查看次数

Java Webstart Truststore SSL

需要一些指导.

我有java webstart应用程序,我希望它通过SSL连接到服务器.只需添加一个属性,如:System.setProperty("javax.net.ssl.trustStore","my.keystore");但是因为JAWS程序是从服务器下载不起作用,本地文件系统上没有my.keystore.所以决定将证书分发给所有客户.我做了以下工作.

  1. 将此信任存储读取为流(使用getResourceAsStream方法).
  2. 将其保存在客户端计算机上的任何文件中(sometemp)
  3. 调用System.setProperty("javax.net.ssl.trustStore",trustStorePath);

但我相信必须有比这更好的解决方案..任何想法让它变得更好?

public boolean validateUserFromActiveDirectory(String userId) {
                    final String MEMBER_GROUP = "CN=asdadasd,OU=asdasdasd Accounts,OU=adasdas,OU=asdasdas,DC=asdasdas,DC=asdasdas,DC=adasdasd,DC=asdasdasd";
            String employeeNumber = "";
            final String LDAP_INIT_CTX = "com.sun.jndi.ldap.LdapCtxFactory";
            final String LDAP_URL = "ldap://xx-ssssssss.eee.eee.eeeee.eeeee:636";
            final String MY_ATTRS[] = { "employeeNumber" };
            String adminPassword = "somepassword";
            String securityProtocol = "ssl";
            boolean isValidUser = false;
            try {

                  Hashtable env = new Hashtable();
                  env.put(Context.INITIAL_CONTEXT_FACTORY, LDAP_INIT_CTX);
                  env.put(Context.PROVIDER_URL, LDAP_URL);
                  env.put(Context.SECURITY_AUTHENTICATION, "simple");
                  env.put(Context.REFERRAL, "follow");
                  env.put(Context.SECURITY_PRINCIPAL, MEMBER_GROUP);
                  env.put(Context.SECURITY_CREDENTIALS, adminPassword);
                  env.put(Context.SECURITY_PROTOCOL, securityProtocol);

            //C:\Documents and Settings\yourusername\Local Settings\Temp
            File tf = File.createTempFile("someTruststore", …
Run Code Online (Sandbox Code Playgroud)

java ssl truststore java-web-start

7
推荐指数
1
解决办法
7240
查看次数

Java webstart堆转储

我一直试图让webstart在内存不足时转储到堆转储.

我知道jmap/jconsole这样做的方式,但我真正想做的是将选项添加到jnlp文件并尝试了以下选项.

  1. j2se version ="1.6+"java-vm-args =" - server + HeapDumpOnOutOfMemoryError"max-heap-size ="768M"
  2. j2se version ="1.6+"java-vm-args =" - server -XX:+ HeapDumpOnOutOfMemoryError"max-heap-size ="768M"

java java-web-start

7
推荐指数
2
解决办法
2658
查看次数

JNLP与本地代码库 - 如何更新?

指定代码库是合法的:

<jnlp spec="6.0+"
    codebase="file:/c:/MyApp/"
    href="myapp.jnlp">
Run Code Online (Sandbox Code Playgroud)

使用JWS导入时,它会创建桌面快捷方式,并且应用程序正在运行.

但是,有一点与远程代码库有很大不同.当我在应用程序运行时更新这些文件时,它基本上会停止工作ClassNotFoundExceptions.似乎JWS没有复制jar,或者在更新时立即复制它们,以某种方式覆盖正在运行的进程使用的jar.

我如何让它像文件是远程的一样工作?也就是说,将文件复制到缓存并仅在启动时检查更新.

编辑:我还没有办法做到这一点,并决定采用自制的替代品.在此过程中,我发现了一些错误,并在http://squirrel.pl/blog/2011/11/24/java-web-start-bugs-offline-edition/上总结了一些观察结果.将它发布在这里,以防它可能对某人有用.

java jnlp java-web-start

7
推荐指数
1
解决办法
6292
查看次数

Java 7u4 webstart安全性异常:类与信任级别不匹配

我们开始注意到,使用Java 7(特别是更新4),我们的所有用户都开始使用我们的Webstart应用程序看到这一点:

[14:42:58,422] AWT-EventQueue-0(DEBUG) java.lang.SecurityException: class "CLASSNAME" does not match trust level of other classes in the same package
[14:42:58,422] AWT-EventQueue-0(DEBUG) at com.sun.deploy.security.CPCallbackHandler$ChildElement.checkResource(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at com.sun.deploy.security.DeployURLClassPath$JarLoader.checkResource(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at com.sun.deploy.security.DeployURLClassPath$JarLoader.getResource(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at com.sun.deploy.security.DeployURLClassPath.getResource(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at java.net.URLClassLoader$1.run(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at java.net.URLClassLoader$1.run(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at java.security.AccessController.doPrivileged(Native Method)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at java.net.URLClassLoader.findClass(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at java.lang.ClassLoader.loadClass(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at java.lang.ClassLoader.loadClass(Unknown Source)...More
Run Code Online (Sandbox Code Playgroud)

其中CLASSNAME =几乎每个类都在应用程序执行中的几个jar中的随机点,打破了几个行为.如果我们的用户使用Java 6,他们没有问题!只是7(更新4).我们签署所有的罐子,主要的应用罐子和它的库罐子.即启动我们的webstart应用程序的用户看到蓝色盾牌而不是黄色或红色.

这显然是一个问题,因为用户现在更频繁地升级到Java 7.我试图通过使用先前的安装(工作)或安装新的应用程序来强制我们的应用程序在用户计算机上使用Java 6 …

java security securityexception java-web-start java-7

7
推荐指数
2
解决办法
9688
查看次数

将JNLP修复为JRE 1.6并安装JRE 1.7时,Java WebStart启动失败

在我的公司,我们下载并启动了一个与JRE 1.6.0_20绑定的JNLP应用程序.我们使用系统缓存功能下载JAR.

当我们在PC上安装JRE 1.7时,WebStart无法启动.当我们启用日志时,我们会看到以下异常:

java.lang.ExceptionInInitializerError
    at com.sun.deploy.net.protocol.https.Handler.openConnection(Unknown Source)
    at java.net.URL.openConnection(Unknown Source)
    at com.sun.deploy.net.BasicHttpRequest.createUrlConnection(Unknown Source)
    at com.sun.deploy.net.BasicHttpRequest.doRequest(Unknown Source)
    at com.sun.deploy.net.BasicHttpRequest.doGetRequestEX(Unknown Source)
    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.getCachedFile(Unknown Source)
    at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(Unknown Source)
    at com.sun.javaws.jnl.LaunchDescFactory.buildDescriptor(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)
Caused by: java.lang.ClassCastException: sun.security.ssl.X509TrustManagerImpl cannot be ast to com.sun.net.ssl.internal.ssl.X509ExtendedTrustManager
    at com.sun.deploy.security.X509ExtendedDeployTrustManager.<init>(Unknown Source)
    at com.sun.deploy.net.protocol.https.Handler$Initializer$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.deploy.net.protocol.https.Handler$Initializer.<clinit>(Unknown Source)
... 16 more
Run Code Online (Sandbox Code Playgroud)

有一个已知的解决方法吗?

java jnlp java-web-start java-7

7
推荐指数
1
解决办法
7503
查看次数

JXMapKit/-Viewer非常慢,因为webstartable - 从哪里开始挖掘?

只是尝试在整个swinglabs演示中添加一些swingx-ws组件 - 并注意到与本地加载相比,简单的JXMapKit/-Viewer在webstartable中加载tile的速度要慢几个数量级.

相当失去我应该开始寻找的地方(ui更新似乎在EDT上,但可能需要仔细看看):

  • 是否有其他人遇到不同的加载时间?
  • 可能是什么原因的猜测?
  • 如何调试webstartable?

代码非常简单(要在本地运行,你需要swingx和swingx-ws:

public class WSDemo {

    private JComponent createContent() {
        JComponent content = new JPanel();
        content.setLayout(new BorderLayout());

        content.add(createMapKit()); 
        return content;
    }

    protected JComponent createMapKit() {
        final int max = 17;
        TileFactoryInfo info = new TileFactoryInfo(1, max - 2, max, 256, true,
                true, // tile size is 256 and x/y orientation is normal
                "http://tile.openstreetmap.org",// 5/15/10.png",
                "x", "y", "z") {
            public String getTileUrl(int x, int y, int zoom) {
                zoom = max …
Run Code Online (Sandbox Code Playgroud)

java swing java-web-start jxmapkit

7
推荐指数
1
解决办法
373
查看次数

将Swing应用程序从Java 6迁移到Java 7 Update 11时,运行时内存会增加

一旦Java Swing应用程序从Java 6 32位转移到Java 7 32位更新11,我们就会遇到性能问题.任何人都可以提供一些线索吗?

该应用程序使用Java Web-start技术,服务器是Tomcat 7.客户端应用程序占用1GB内存,因此屏幕冻结.

我们正在交换序列化对象,以下是代码:

Object object = connection.sendCommand(command); // exchanging serialized object            

public class ConnectionImpl implements Connection {
    public Object sendCommand(Command command) throws Exception {
        URL url = new URL(System.getProperty("serverUrl"));
        URLConnection connection = url.openConnection();
        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.setUseCaches(false);
        oos = new ObjectOutputStream(new BufferedOutputStream(connection
                    .getOutputStream()));
        oos.writeObject(command);
        oos.flush();
        InputStream inputStream = connection.getInputStream();
        ZipInputStream zip = new ZipInputStream(inputStream);
        if (zip.getNextEntry() != null) {
            ois = new ObjectInputStream(zip);
            object = ois.readObject();
        }
        zip.close();
    }
}

// The serialized class …
Run Code Online (Sandbox Code Playgroud)

java memory swing java-web-start

7
推荐指数
2
解决办法
1713
查看次数

使用Gradle将所有创建的和第三方jar复制到一个文件夹中

我们有一个多项目gradle设置,每个子项目有一个Java jar:

- root-project
  |-sub-project-a
  |-sub-project-b
  |-sub-project-c
Run Code Online (Sandbox Code Playgroud)

现在,因为我们正在创建Java webstart应用程序,所以我们需要签署所有项目jar以及所有第三方库(依赖项).

我现在的方法是将所有已构建的子项目jar和所有第三方库复制到一个单独的文件夹中,并执行签名任务.但是我无法复制罐子.

这是我在root build.gradle中的方法:

task copyFiles(type: Copy, dependsOn: subprojects.jar) {
    from configurations.runtime
    from("build/libs")
    into("webstart/lib")
    include('*.jar')
}
Run Code Online (Sandbox Code Playgroud)

和...一起:

task signAll(dependsOn: [copyFiles]) << {
    new File('webstart/signed').mkdirs()
    def libFiles = files { file('webstart/lib').listFiles() }
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试执行gradle signAll.但是,我只能在webstart/lib文件夹中找到一个带有根项目名称的空jar.

也许我的方法是完全错误的.如何将所有创建的和第三方派对复制到一个文件夹中?

java jar java-web-start gradle

7
推荐指数
1
解决办法
9444
查看次数

如何为Java 8u141签署Java Webstart应用程序?

看起来Oracle已经发生了类似于Java 7u45的更改,其中需要设置新的清单值来运行签名的Java Webstart应用程序(请参阅此处).

目前,我们使用Java 8u131签名的应用程序不能从带有错误消息的Java8u141开始 Could not verify signing in resource: (arbitrary resource.jar)

您是否仍然可以使用Java 8u141运行已签名的Webstart应用程序,即我是否有特殊问题?

发行说明中是对安全性更改的说明,但它们与代码签名无关.此外密码路线图是这样的释放并没有真正改变代码签名,尽管Java的8u131例如,在辗转MD5支持.但是Java 8u131对我有用,Maven Java Webstart插件也使用SHA-256-Digest.

java code-signing java-web-start

7
推荐指数
1
解决办法
2691
查看次数