13

Oracle によって起動された Java 7 update 25 以降、アプリケーションは機能しなくなりました。

最初に、コードベースとセキュリティ タグがマニフェスト ファイルにないという警告が表示されましたが、これを修正しました。

最終的に発生する問題は、コンソールに次の行しか表示されないことです。

#### Java Web Start Error:
#### null

また、アプリケーション エラー ダイアログが表示され、次のメッセージが表示されます: Unable to launch the application .

詳細ボタンは、例外で次の詳細を提供します。

java.lang.NullPointerException
    at com.sun.jnlp.JNLPClassLoader.getPermissions(Unknown Source)
    at java.security.SecureClassLoader.getProtectionDomain(SecureClassLoader.java:206)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at desktop.DesktopProxySelector.<init>(DesktopProxySelector.java:24)     <- code smippet below
    at desktop.Main.main(Main.java:139)                                      <- code smippet below
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.sun.javaws.Launcher.executeApplication(Unknown Source)
    at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
    at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
    at com.sun.javaws.Launcher.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:724)

関連するコード部分は次のとおりです。

Desktop.Main.main

/**
 * Main method, starts the application
 */
public static void main(String[] args) {
    System.setProperty("java.net.useSystemProxies", "true");

    //Logger.getLogger("httpclient.wire.header.level").setLevel(Level.FINEST);
    //Logger.getLogger("org.apache.commons.httpclient.level").setLevel(Level.FINEST);
    java.net.ProxySelector.setDefault(new DesktopProxySelector(java.net.ProxySelector.getDefault()));

(最後の行は行番号 139 です)

desktop.DesktopProxySelector:

public class DesktopProxySelector extends ProxySelector {

    public  DesktopProxySelector(ProxySelector defaultSelector) {
    URI httpsUri = new CentralConfigurationService().getCentralLocation();

(最後の行は、例外が発生する行番号 24 です)

この「マイナー」アップデートによって引き起こされたJavaのこの新しい動作について、誰かが手がかりのヒント(またはより良い解決策)を教えてくれますか。

java -jar Desktop.jar を使用して cli から直接アプリケーションを実行すると、アプリケーションはファイルを実行するため、この問題は明らかに Java Web Start の変更に関係しています。

@trashgod: com.sun.jnlp.JNLPClassLoader.getPermissions で NullPointerException が発生するため、このエラーは明らかに 7u25 でのアクセス許可の変更と関係があります。

私がどうなると思うかを説明するだけです (私は Wouter の同僚です): desktop.Main は、desktop.DesktopProxySelector (私たちのクラス) をインスタンス化し、desktop.DesktopProxySelector は、desktop.configuration.CentralConfigurationService をインスタンス化します。 .

CentralConfigurationService がインスタンス化される DesktopProxySelector init の最初の行で、JNLPClassLoader によって呼び出される getPermissions メソッドが NullPointerException をスローします。そのため、クラスのアクセス許可を取得して java webstart によって CentralConfigurationService クラスをロードしているときに、何か問題が発生しています。これは、追加のアクセス許可が必要な URI クラスがインスタンス化されている (リモート uri への接続がセットアップされている) という事実と関係があるのでしょうか?

4

1 に答える 1

6

最終的に問題は解決しました。この問題は、メインの MANIFEST.MF ファイルに含まれる jar ファイルと、launch.jnlp に記載されている jar ファイルの不一致が原因で発生しました。

明らかに、使用されるすべての jar ファイルも launch.jnlp ファイルに存在する必要があります。

(以前は、このファイルを手動でシンクに保持することが決定されていましたが、これは明らかに常に適切な方法で維持されているわけではありませんでした。現在、このプロセスは自動化されているため、問題は発生しなくなりました。)

于 2013-06-24T20:47:32.133 に答える