2017-02-04 2 views
0

これは私の最初の質問です。 私は単純なJavaFXアプリケーションを開発しています。唯一必要なことは、Webユーザーインターフェイスを表示することです。 すべてがOKのようです、私は、EclipseからRunnableをJARファイルをエクスポートして、私は窓10と7でそれをテストしたが、私は窓XP OS上でjarファイルを置いたとき、私は次があります。Java WebViewはWindows XPで例外を生成します

Exception in Application start method 
Exception in thread "main" java.lang.reflect.InvocationTargetException 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
     at java.lang.reflect.Method.invoke(Unknown Source) 
     at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa 
der.java:58) 
Caused by: java.lang.RuntimeException: Exception in Application start method 
     at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherIm 
pl.java:917) 
     at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(
LauncherImpl.java:182) 
     at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.UnsatisfiedLinkError: Invalid URL for class: rsrc:com/sun/g 
lass/utils/NativeLibLoader.class 
     at com.sun.glass.utils.NativeLibLoader.loadLibraryFullPath(NativeLibLoad 
er.java:162) 
     at com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoad 
er.java:94) 
     at com.sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.java: 
39) 
     at com.sun.webkit.WebPage.lambda$static$39(WebPage.java:130) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at com.sun.webkit.WebPage.<clinit>(WebPage.java:129) 
     at javafx.scene.web.WebEngine.<init>(WebEngine.java:879) 
     at javafx.scene.web.WebEngine.<init>(WebEngine.java:866) 
     at javafx.scene.web.WebView.<init>(WebView.java:273) 
     at application.Main.start(Main.java:30) 
     at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162 
(LauncherImpl.java:863) 
     at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(Platfor 
mImpl.java:326) 
     at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl. 
java:295) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformI 
mpl.java:294) 
     at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatch 
er.java:95) 
     at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
     at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.ja 
va:191) 
     ... 1 more 

はここに私のコードです:誰かがCAL私を助けること

package application; 

import javafx.application.Application; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javafx.event.EventHandler; 
import javafx.stage.Stage; 
import javafx.util.Callback; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.control.Alert; 
import javafx.scene.control.ButtonType; 
import javafx.scene.control.ScrollPane; 
import javafx.scene.control.Alert.AlertType; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.web.WebEngine; 
import javafx.scene.web.WebEvent; 
import javafx.scene.web.WebView; 


public class Main extends Application { 
    @Override 
    public void start(Stage stage) 
    { 
     stage.setMinWidth(800); 
     stage.setMinHeight(600); 
     stage.setMaximized(true); 
     Scene scene = new Scene(new Group()); 

     WebView browser = new WebView(); 
     WebEngine we = browser.getEngine(); 

     //setting personalized context menu 
     browser.setContextMenuEnabled(false); 
     //createContextMenu(browser); 

     //preventing bug when maximmizing 
     stage.maximizedProperty().addListener(new ChangeListener<Boolean>() 
     { 
      @Override 
      public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) 
      { 
       System.out.println("maximized:" + t1.booleanValue()); 
      } 
     }); 

     //intercepting javascript alert 
     browser.getEngine().setOnAlert(new EventHandler<WebEvent<String>>() 
     { 

      @Override 
      public void handle(WebEvent<String> e) 
      { 
       Alert alert = new Alert(AlertType.WARNING); 
       alert.setTitle("MyApp"); 
       alert.setHeaderText(null); 
       alert.setContentText(e.getData()); 
       alert.showAndWait(); 
       System.out.println("JS alert() message: " + e.getData()); 
      } 

     }); 

     //intercepting javascript confirm 
     browser.getEngine().setConfirmHandler(new Callback<String, Boolean>() 
     { 
      @Override 
      public Boolean call(String s) 
      { 
       Boolean ret; 
       ButtonType ok, cancel; 

       ok = new ButtonType("Ok"); 
       cancel = new ButtonType("Abort"); 

       Alert alert = new Alert(AlertType.CONFIRMATION); 
       alert.setTitle("SameLAB"); 
       alert.setHeaderText(s); 
       alert.setContentText(null); 
       alert.getButtonTypes().setAll(ok, cancel); 
       alert.showAndWait(); 

       if(alert.getResult() == ok) 
        ret = true; 
       else 
        ret = false; 

       return ret; 
      } 
     }); 


     ScrollPane sp = new ScrollPane(); 
     sp.setFitToWidth(true); 
     sp.setFitToHeight(true); 
     sp.setContent(browser); 

     //loading and showing content 
     we.load("https://www.google.it/"); 
     scene.setRoot(sp); 
     stage.setScene(scene); 
     stage.show(); 
    } 

    public static void main(String[] args) 
    { 
     launch(args); 
    } 
} 

希望、ありがとうございました!

+0

は、Javaのバージョンがインストールされて作成したWebViewのインスタンス(例えば、スタートで(ステージprimaryStage)メソッド)の前に、あなたのコードのどこかに追加WinXPのボックスに? –

+0

https://community.oracle.com/thread/2283029 –

+0

@JimGarrison on WinXPマシンJavaを最新のリリース(1.8.0_121)にアップグレードしました。もちろん、相対JRE(1.8.0_121 32ビット)のjarファイルを作成しました。 –

答えて

0

私はJDK 77あまりにも(おそらくいくつかそれ以降のバージョンを使用している場合、今のWebViewとWebオーサリングツールが正常に動作と同じ問題が早期リリースJDK 122

である最後のJDK 121 へのアップグレード後に、今日、この問題に遭遇しました(以下のリンクに記載されているように - 102)、私はそれをチェックアウトしなかった)。 ライブラリの読み込みに問題があります。NativeLibLoader.loadLibrary( "jfxwebkit"); いくつかの新しいMicrosoft Visual C++再配布可能ファイルが役立つというあいまいな提案がありました。

が編集されました。 これは既にバグレポート:https://bugs.openjdk.java.net/browse/JDK-8170084にあり、解決策: "修正されません"で閉じられました。

したがって、1つのオプションが残されています - Windows XP用のバンドルされたJREバージョン1.8.0_102以下を提供してください。

+0

Thans a lot RoK、私はあなたの解決策を試してみましょう。多分私はW XPのWebViewがInternet Explorer 8を使用すると思うので、ちょっと役に立たないでしょう。ブートストラップのサポートもjqueryのサポートもありません。私は見ていますが、助けてくれてありがとうございます。 –

+0

申し訳ありません、Matt Chad、私は自分のプロジェクトでJDKのバージョンを使いこなし、System.loadの2番目の回避策は実際には機能しません。バンドルされたJREで初めて。私はLaunch4jラッパーをお勧めします。 – RoK

0

Windows XPではバンドルされたJREバージョン1.8.0_102以下を提供しています。別の一時的な汚れのオプション:1.8.0_102からjfxwebkit.dllを使用してアプリケーションをバンドルして

if ("Windows XP".equals(System.getProperty("os.name"))){ 
System.load(ABS_PATH_TO_JFXWEBKIT_DLL + "\\jfxwebkit.dll");} 
+0

試してみるよ!ありがとうございました! :) –

関連する問題