JavaFXでWebEngineを用いたアプリケーションの開発を行なっています。
開発しているアプリケーションを、仮にapp1、app2とします。
app1、app2は接続先(URL)が違うだけの、同アプリケーションです。
(UI、機能は全て一緒)
#####バージョン情報
- Java 1.8.0_144
#####事象
- app1のjnlpをクリックし、アプリケーションを起動する。
- app2のjnlpをクリックし、アプリケーションを起動する。
- app1が起動している状態でapp2の起動時に下記エラーが発生する
Exception in thread "JavaFX Application Thread" netscape.javascript.JSException: TypeError: null is not an object (evaluating 'localStorage.getItem') at com.sun.webkit.dom.JSObject.fwkMakeException(JSObject.java:146) at com.sun.webkit.WebPage.twkExecuteScript(Native Method) at com.sun.webkit.WebPage.executeScript(WebPage.java:1509) at javafx.scene.web.WebEngine.executeScript(WebEngine.java:1005)
#####事象発生箇所
- app1、app2にコードの差はありません。
- app1起動後、app2を起動すると下記箇所でエラーを確認
app1とapp2の起動順番を変えても発生。
(app2起動後、app1を起動するとapp1の下記箇所でエラーを確認)
java
1//javaからjsを実行 2webEngine.executeScript(setLocaleStorage(language));
CoffeeScript
1@setLocaleStorage = (lang) => 2 #ここでエラー発生 3 dataLang = localStorage.getItem('language')
SingleInstanceService実装箇所
Java
1 try { 2 // JavaWebStartで起動されたアプリケーションをSingletonオブジェクトとして登録 3 mSiService = (SingleInstanceService)ServiceManager.lookup("javax.jnlp.SingleInstanceService"); 4 } catch (UnavailableServiceException ex) { 5 // 利用できないサービスをlookupした場合のexception 6 ex.printStackTrace(); 7 return; 8 } 9 10 // 同アプリケーションの別インスタンスが呼び出された時のlistner 11 mSiListener = (String[] params1) -> { 12 // エラーダイアログを出して新たにJWSインスタンスを起動させない 13 Platform.runLater(() -> { 14 Alert alert = AppUtils.createAlert( 15 Alert.AlertType.WARNING, 16 AppUtils.getMessage( "エラーメッセージ" ), 17 AppUtils.getMessage( "エラーメッセージ" ) 18 ); 19 alert.show(); 20 }); 21 }; 22 mSiService.addSingleInstanceListener(mSiListener);
#####想定される原因
- javaのプロセスが起動されると、そのPCのLocalStrage全体がロックされている?
#####実現したいこと
- app1,app2それぞれを正常に動作させたい。
- 複数起動を許容したい。
- プロセスごとにlocalStrageを保持したい
少しでもヒントをいただければと考えています。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー