2013-06-21 7 views
13

Java 7アップデート25がOracleによって起動されて以来、私たちのアプリケーションは機能しなくなりました。Java 7アップデート25では、Java Web Startアプリケーションがログなしで失敗する

最初に、コードベース&のマニフェストファイルに不明瞭なタグがありませんでしたが、修正しました。私たちは今で終わる

問題はコンソールで、我々は唯一の次の行を取得することです:

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

また、メッセージでアプリケーションエラーダイアログが出ます:アプリケーションを起動することができません

詳細ボタンは例外で、次の詳細を与える:

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を使用してアプリケーションを直接実行すると、アプリケーションでファイルが実行されるため、Java Web Startの変更に問題がある可能性があります。

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

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

CentralConfigurationServiceがインスタンス化されるDesktopProxySelector initの最初の行で、JNLPClassLoaderによって呼び出されたgetPermissionsメソッドがNullPointerExceptionをスローします。そこで、Java WebstartでCentralConfigurationServiceクラスをロードしているときに、そのクラスのアクセス権を取得する際に何かがうまくいかない場合があります。 URIクラスがインスタンス化され、余分なアクセス権(リモートURIへの接続が設定されている)が必要であるという事実とは関係がありますか?

+0

JavaFXは今まで私が読んだことからu25に含まれていますが、それが挑戦できるかどうかはわかりません。 – fge

+0

これまでのところ、私は自分のエラーを公開するアップデートを見ています。これらの関連[Q&A](http://stackoverflow.com/q/17210607/230513)、[Q&A](http://stackoverflow.com/q/17204465/230513)も参照してください。 – trashgod

+0

この問題は、java webstartのネットワーク接続に関連しているようですが、java 7u25の権限システムが変更されています。 mainの行139をコメントアウトすると、HttpClientFactory.initialize();を読み込むdesktop.Main $ 2.run(Main.java:148)で全く同じ例外が発生します。ですから、本当に、JavaのWebstartにネットワーク接続が関係するjava 7u25の新しいアクセス権システムにバグがあるようです。 –

答えて

6

最終的に問題は解決されました。 問題は、メインのMANIFEST.MFファイル内のインクルードされたjarファイルと、launch.jnlpで説明されているjarファイルの不一致が原因です。

これに加えて、使用するすべてのjarファイルをlaunch.jnlpファイルにも含めておく必要があります。

(過去には、それは明らかに常にpropperの方法で維持されなかった、シンクにこのファイルを手動で維持することを決めました。今、このプロセスが自動化されて、問題は、もはや私たちに起こるべきではありませんので。)

+1

これは悪い考えです - .jarファイルとjnlpファイルの両方に重複した情報が必要なことはセキュリティを追加せずにエラーの機会を作り出します(両方の内容を制御するので) – ddyer

+0

それは私にとってnetbeans 。過去にプロジェクトがどのように設定されているかと関連しているかもしれません。 – Wouter

+0

@Wouter、私はNetbeansを使って自分の.jnlpアプリもコンパイルします。私もこのエラーが発生しています。 jarファイルをMANIFEST.MFファイルにどのように追加しますか? – ryvantage

関連する問題