質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

FXML

FXMLは、JavaFXに用意されているXMLベースのGUI記述言語です

Q&A

解決済

1回答

1536閲覧

Scene builderを使いJavaFxで画像を表示させたいのですがエラーが出て困ってます

BOKETAMIAN

総合スコア3

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

FXML

FXMLは、JavaFXに用意されているXMLベースのGUI記述言語です

0グッド

0クリップ

投稿2020/07/13 05:58

編集2020/07/13 07:04

前提・実現したいこと

SceneBuilderでImageViewに画像を表示させたいです。

発生している問題・エラーメッセージ

BaseView:NextView() 例外発生 java.lang.IllegalArgumentException: Invalid URL: Invalid URL or resource not found at javafx.graphics/javafx.scene.image.Image.validateUrl(Image.java:1107) at javafx.graphics/javafx.scene.image.Image.<init>(Image.java:617) at view.MainPageView.Init(MainPageView.java:16) at view.BaseView.NextView(BaseView.java:86) at application.Main.start(Main.java:38) at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428) at java.base/java.security.AccessController.doPrivileged(Native Method) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427) at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: java.lang.IllegalArgumentException: Invalid URL or resource not found at javafx.graphics/javafx.scene.image.Image.validateUrl(Image.java:1099) ... 13 more

該当のソースコード

Javafx

1package application; 2 3import javafx.application.Application; 4import javafx.stage.Stage; 5import model.BaseModel; 6import view.BaseView; 7import view.MainPageView; 8 9/*********************************** 10 * 初期起動クラス 11 ***********************************/ 12public class Main extends Application { 13 14 /*********************************** 15 * 画面の初期設定を行う 16 * @Param primaryStage 17 ***********************************/ 18 @Override 19 public void start(Stage primaryStage) { 20 try{ 21 BaseView.setSTAGE(primaryStage); //ステージを保持させる 22 //最初のページの表示処理 23 24 25 MainPageView mpv = new MainPageView("MainPage.fxml"); 26 mpv.NextView(new BaseModel()); 27 28 29 30 31 }catch(Exception e){ 32 System.out.println("Main:start() 例外発生"); 33 e.printStackTrace(); 34 } 35 } 36 37 /*********************************** 38 * 最初に呼ばれるメソッド 39 * @param args //コマンドライン 40 ***********************************/ 41 public static void main(String[] args) { 42 launch(args); 43 } 44} 45 46

java

1package view; 2 3import java.util.HashMap; 4import java.util.Map; 5 6import javafx.collections.ObservableList; 7import javafx.fxml.FXMLLoader; 8import javafx.scene.Node; 9import javafx.scene.Scene; 10import javafx.scene.layout.AnchorPane; 11import javafx.scene.layout.Pane; 12import javafx.stage.Stage; 13import model.BaseModel; 14 15/*********************************** 16 * ビューのベースとなるクラス 17 ***********************************/ 18public abstract class BaseView<T extends Pane> { 19 static private Stage STAGE ; //ステージクラス 20 private BaseModel m_SendParam ; //画面遷移時のパラメータ引き渡し用クラス 21 private Map<String,Node> m_objectList ;//オブジェクトの配列 22 private final String PAGE_FILENAME ; //fxmlのファイル名 23 private T m_pane ; //ページのデータ 24 /*********************************** 25 * コンストラクタ 26 * @param i_fileName //ファイル名 27 ***********************************/ 28 public BaseView(String i_fileName ){ 29 PAGE_FILENAME = i_fileName ; 30 m_objectList = new HashMap<String,Node>(); 31 } 32 33 /*********************************** 34 * ステージを設定する 35 * @param i_STAGE 36 ***********************************/ 37 static public void setSTAGE(Stage i_STAGE){ 38 STAGE=i_STAGE; 39 } 40 41 /*********************************** 42 * 遷移時のパラメータを渡す 43 * @return m_SendParam 44 ***********************************/ 45 public BaseModel getParam(){ 46 return m_SendParam; 47 } 48 49 /*********************************** 50 * ページ遷移処理 51 * @param i_Model //引き渡しをしたいデータ 52 ***********************************/ 53 public void NextView( BaseModel i_Data){ 54 try { 55 56 //データを設定 57 m_SendParam = i_Data ; 58 59 //ページを作成 60 m_pane = FXMLLoader.load(getClass().getResource( "../fxml/" + PAGE_FILENAME)); 61 62 AnchorPane pane = (AnchorPane)m_pane; 63 64 65 66 //Sceneの設定 67 Scene scene = new Scene(m_pane,pane.getMaxHeight() , pane.getMaxWidth()); 68 scene.getStylesheets().add("fxml/application.css"); 69 STAGE.setTitle("WiZ Sample"); 70 STAGE.setScene(scene); 71 STAGE.show(); 72 73 //オブジェクトの取得 74 ObjectSet(m_pane.getChildren()); 75 76 //初期化処理 77 Init(); 78 79 } catch(Exception e) { 80 System.out.println("BaseView:NextView() 例外発生"); 81 e.printStackTrace(); 82 } 83 } 84 85 /*********************************** 86 * ページの配置オブジェクトを取得する 87 * @param i_date //ページのオブジェクト配列を取得(ページ変数.getChildren()) 88 **********************************/ 89 public void ObjectSet( ObservableList<Node> i_date) { 90 //データを配置 91 for( Node object : i_date) { 92 m_objectList.put(object.getId(), object); 93 } 94 } 95 96 /*********************************** 97 * 配置オブジェクトを取得 98 * @param i_objectName //fx:idの名前を指定 99 * @return 指定のオブジェクトを取得 取得できなければnullが返る 100 **********************************/ 101 public Node getObject(String i_objectName) { 102 return m_objectList.get(i_objectName) ; 103 } 104 105 /*********************************** 106 * ページのインスタンスを渡す 107 * @return 108 **********************************/ 109 public T getPane() { 110 return m_pane ; 111 } 112 113 /*********************************** 114 * 初期化処理 115 **********************************/ 116 abstract public void Init(); 117 118} 119

java

1package view; 2 3import javafx.scene.image.Image; 4import javafx.scene.image.ImageView; 5import javafx.scene.layout.AnchorPane; 6 7public class MainPageView extends BaseView<AnchorPane> { 8 9 public MainPageView(String i_fileName) { 10 super(i_fileName); 11 } 12 13 @Override 14 public void Init() { 15 16 Image image = new Image("vegetable.jpg"); 17 18 ImageView imageview = (ImageView) getObject("imageview"); 19 imageview.setImage(image); 20 21 } 22 23} 24

java

1package model; 2 3public class BaseModel { 4 5}

###階層
src
└application
├ Main.java
└fxml
├ MainPage.fxml
├ application.css
├ MainPage.css
└model
├ BaseModel.java
└view
├ BaseView.java
├ MainPageView.java
├vegetable.jpg

試したこと

パスを変えたり絶対パスで指定しました。

vegetable.jpgのファイル位置を変えました

補足情報(FW/ツールのバージョンなど)

JavaFX Scene Builder 11.0.0

JavaSE-11

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エラーの原因は、指定されたURLのリソースがみつからなかったこと。JavaFX以前のはなしです。

java.lang.IllegalArgumentException: Invalid URL: Invalid URL or resource not found

発生元は、この行。

Image image = new Image("vegetable.jpg");

明記されているかぎり、リソースファイルvegetable.jpgの在り処は、ここ。

src └view ├ BaseView.java ├ MainPageView.java ├vegetable.jpg

srcディレクトリに、リソースを置いても、srcディレクトリを、ふつうはclasspathに設定はしませんから、見つけられないのでしょう。classpathを設定した場所、たとえば、classファイルの在り処に、リソースファイルを置かれてはいかがでしょうか。たとえば。

classes └view ├ BaseView.class ├ MainPageView.class ├ vegetable.jpg

投稿2020/07/13 23:45

shiketa

総合スコア3971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BOKETAMIAN

2020/07/14 07:10

JavaFX以前の問題だったとは... ありがとうございました。初心者ながらこれからも頑張っていこうとおもいます 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問