###前提・実現したいこと
Macのパソコンで、Eclipseを使ってJavaの開発を行っています。
Eclipse上で実行するときと、
実行可能JARファイル(生成されるJARに必須ライブラリーをパッケージ)としてエクスポートし、
ダブルクリックで実行する時の動作が異なります。
できれば、Eclipse上で実行しているときと全く同じように
実行可能JARファイルでもアプリケーションを動かしたいのですが
そのためにどうすればいいのか分からない状況です。
あと、Macのターミナルから、「java -jar ○○.jar」で実行した時と
直接JARファイルをダブルクリックして実行したときも、また動作が違うようです。
「java -jar ○○.jar」で実行すれば、MainFormのところに書いた件以外は
Eclipseで実行していたときと同じように動きます。
症状については以下の通りです。
WebEngine(WebView?)の動作に差があるようなので、それをなんとかしたいのですが
何か原因や、解決策にお心当たりはないでしょうか…
拙い文章で申し訳ありませんが、アドバイス頂けますと幸いです><
###MainForm
ここの、
<content><fx:include fx:id="childTest1" source="application/Test1Form.fxml" /></content>
について、
Eclipseで実行する時は、「source="Test1Form.fxml"」 でないと「java.lang.reflect.InvocationTargetException」が発生して起動できないのに、
実行可能JARとして出力した時は、下記のように「application/」がついていないと起動できません。
今のところ、この症状については、実行可能JARとしてエクスポートする際に
「application/」を追記することで解決はしています。
Xml
1<?xml version="1.0" encoding="UTF-8"?> 2 3<?import javafx.scene.paint.*?> 4<?import javafx.scene.text.*?> 5<?import javafx.geometry.*?> 6<?import javafx.scene.*?> 7<?import javafx.scene.control.*?> 8<?import javafx.scene.web.*?> 9<?import java.lang.*?> 10<?import javafx.scene.layout.*?> 11<?import javafx.scene.layout.BorderPane?> 12 13<BorderPane focusTraversable="true" xmlns="http://javafx.com/javafx/8" 14 xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainController"> 15 <center> 16 <AnchorPane focusTraversable="true" prefHeight="600.0" 17 prefWidth="600.0" BorderPane.alignment="CENTER"> 18 <children> 19 <TabPane layoutY="75.0" prefHeight="525.0" prefWidth="600.0" 20 tabClosingPolicy="UNAVAILABLE" AnchorPane.bottomAnchor="0.0" 21 AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" 22 AnchorPane.topAnchor="75.0"> 23 <tabs> 24 <Tab fx:id="tabMain" text="テスト1"> 25 <content> 26 <fx:include fx:id="childTest1" source="application/Test1Form.fxml" /> 27 </content> 28 </Tab> 29 <Tab fx:id="tabSkip" text="テスト2"> 30 <content> 31 <fx:include fx:id="childTest2" source="application/Test2Form.fxml" /> 32 33 …
###MainController
結構略しています… getElementsByClassName("☆")の☆部分には、どちらも同じクラス名が入っています
WebView(webviewTest)、ProgressIndicator(progressTest)、Label(lblTest)があるとして、
Workerが、Worker.State.SUCCEEDEDになったら、progressTestを非表示にする、というようにしたいのですが
Eclipseで実行した時と、実行可能JARファイルとしてエクスポート後に実行した時とで、WebEngineの動作が違うらしく
実行可能JARとして実行すると、Workerがほぼ全く「SUCCEEDED」になりません。(SCHEDULEDかRUNNINGになっているようです)
これを何とか、Eclipseで実行していたときと同じような動作にしたいのです。
Java
1webEngine = webviewTest.getEngine(); 2 3webEngine.getLoadWorker().stateProperty() 4 .addListener(new javafx.beans.value.ChangeListener<Worker.State>() { 5 @Override 6 public void changed(ObservableValue<? extends State> observable, State oldValue, State newValue) { 7 if (webEngine.getLoadWorker().getState().equals(State.SUCCEEDED)) { 8 progressTest.setVisible(false); 9 if (webEngine.getLocation().equals("http://○○○○")) { 10 if ((boolean) webEngine.executeScript( 11 "( document.getElementsByClassName(\"☆\").item(0) != null );")) { 12 String testUrl = (String) webEngine.executeScript( 13 "var $el = document.getElementsByClassName(\"☆\"); $el[0].href;"); 14 lblTest.setText(testUrl); 15 } 16 } 17 } else { 18 progressTest.setVisible(true); 19 } 20 }); 21…
##追記
調べてみたところ、どうやら、
起動の仕方?によってWebEngineのUserAgentが違っているようです。
webEngine.getUserAgent();を出力したところ、
Eclipseから起動した時は、
Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.19 (KHTML, like Gecko) JavaFX/8.0 Safari/538.19
実行可能JARとしてエクスポートして、ダブルクリックで起動した時は
Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/602.1 (KHTML, like Gecko) JavaFX/8.0 Safari/602.1
となっている事に気が付きました!!
これも何か関係あるのかな、と思っています。
webEngine.setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.19 (KHTML, like Gecko) JavaFX/8.0 Safari/538.19")
こちらを記述して書き換えてみても、状況は変わらないようですが…
解決は難しいのでしょうか…?><
自分でも調べながら気長に待っておりますので、どなたかご回答頂けるとうれしいです。

回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/03 05:49
2017/07/03 06:19
2017/07/03 06:59
2017/07/03 09:03
2017/07/03 09:36
2017/07/03 09:50