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

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

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

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

Q&A

解決済

1回答

10084閲覧

エラー: メイン・クラスapplication.Mainを検出およびロードできませんでした 原因: java.lang.NoClassDefFoundError: javafx/application

ryu-bamboo

総合スコア9

JavaFX

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

0グッド

0クリップ

投稿2021/03/19 15:30

前提・実現したいこと

Eclipseでjavaの勉強をしています。

workspaceを新しく作った後、新規プロジェクトからjavafxプロジェクトを作成し、Windowだけを表示するようなプログラムを実行したところ、質問のようなエラーが起きました。

古いworkspaceではこのようなことが起きなかったので、workspaceを作り替えたのが原因なのかなと予想しているのですが、なぜエラーが起きたのか、解決策を教えていただけると助かります。

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

エラー: メイン・クラスapplication.Mainを検出およびロードできませんでした 原因: java.lang.NoClassDefFoundError: javafx/application/Application

該当のソースコード

Main

1package application; 2 3import javafx.application.Application; 4import javafx.stage.Stage; 5import javafx.scene.Scene; 6import javafx.scene.layout.BorderPane; 7 8 9public class Main extends Application { 10 @Override 11 public void start(Stage primaryStage) { 12 try { 13 BorderPane root = new BorderPane(); 14 Scene scene = new Scene(root,400,400); 15 scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 16 primaryStage.setScene(scene); 17 primaryStage.show(); 18 } catch(Exception e) { 19 e.printStackTrace(); 20 } 21 } 22 23 public static void main(String[] args) { 24 launch(args); 25 } 26} 27

fxml

1<?xml version="1.0" encoding="UTF-8"?> 2 3<?import javafx.scene.layout.AnchorPane?> 4 5<AnchorPane xmlns:fx="http://javafx.com/fxml/1"> 6 <!-- TODO Add Nodes --> 7</AnchorPane>

試したこと

openjfxのファイルを再インストール
コマンドプロンプトでコンパイル

Javac

1C:\zip-of-java\pleiades-2020-12-java-win-64bit-jre_20201222\pleiades\workspace\javafx(practice)\src\application>javac Main.java 2Main.java:3: エラー: パッケージjavafx.applicationは存在しません 3import javafx.application.Application; 4 ^ 5Main.java:4: エラー: パッケージjavafx.stageは存在しません 6import javafx.stage.Stage; 7 ^ 8Main.java:5: エラー: パッケージjavafx.sceneは存在しません 9import javafx.scene.Scene; 10 ^ 11Main.java:6: エラー: パッケージjavafx.scene.layoutは存在しません 12import javafx.scene.layout.BorderPane; 13 ^ 14Main.java:9: エラー: シンボルを見つけられません 15public class Main extends Application { 16 ^ 17 シンボル: クラス Application 18Main.java:11: エラー: シンボルを見つけられません 19 public void start(Stage primaryStage) { 20 ^ 21 シンボル: クラス Stage 22 場所: クラス Main 23Main.java:10: エラー: メソッドはスーパータイプのメソッドをオーバーライドまたは実装しません 24 @Override 25 ^ 26Main.java:13: エラー: シンボルを見つけられません 27 BorderPane root = new BorderPane(); 28 ^ 29 シンボル: クラス BorderPane 30 場所: クラス Main 31Main.java:13: エラー: シンボルを見つけられません 32 BorderPane root = new BorderPane(); 33 ^ 34 シンボル: クラス BorderPane 35 場所: クラス Main 36Main.java:14: エラー: シンボルを見つけられません 37 Scene scene = new Scene(root,400,400); 38 ^ 39 シンボル: クラス Scene 40 場所: クラス Main 41Main.java:14: エラー: シンボルを見つけられません 42 Scene scene = new Scene(root,400,400); 43 ^ 44 シンボル: クラス Scene 45 場所: クラス Main 46Main.java:15: エラー: シンボルを見つけられません 47 scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 48 ^ 49 シンボル: メソッド getClass() 50 場所: クラス Main 51Main.java:24: エラー: シンボルを見つけられません 52 launch(args); 53 ^ 54 シンボル: メソッド launch(String[]) 55 場所: クラス Main 56エラー13個 57

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

jdk-11.0.10
JavaFX 11

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーメッセージから類推できるのは、JavaFXライブラリを参照できずコンパイルエラーになっていることです。

古いworkspaceではうまくいっていたということですが、それはJDK 11ではなく、JDK 8を使ったもので特別JavaFXライブラリ参照設定をしていないものでしょうか?

JDK 8(Oracle JDK 8)はJavaFXが同梱されており、JavaFXのライブラリを参照するのに設定は不要でした。JDK 11以降では、JavaFXが同梱されないためJavaFXのライブラリを参照するのに設定が必要です。

上述が原因であれば、その解決策はJavaFXのライブラリを参照するよう設定することでしょうか。

OpenJFXのWebサイトに、Getting Start with JavaFX のドキュメントが
掲載されています。目次に、Eclipseの項があります。

ここを見ると、EclipseでOpenJDK 11、JavaFX 11以降を利用するには、

  • 新規プロジェクトからjavafxプロジェクトではなくjavaプロジェクトを選んで

作成する
javafxプロジェクトは、JDK 8用ではないかと推測

  • JavaFXのライブラリを参照できるようにするため、JavaFXのライブラリ設定を登録

が必要なようです(Eclipseは使っていないのでそれ以上は不案内です)。

OpenJDK 11、JavaFX 11以降の環境でコマンドラインでコンパイルするときは、JavaFXのライブラリを参照するコマンドラインオプションを指定する必要があります。

JavaFXのプログラミング自体を勉強目的とし、JavaFXの環境設定周りの手間をなくしたいのであれば、JavaFXが同梱されたOpenJDKディストリビューションを利用するのも一手です。

Standard JDKではなく、Full JDKを選ぶとJavaFXが同梱されたJDKが入手

JDKではなくJDK FXを選ぶとJavaFXが同梱されたJDKが入手

これを使うと、JDK 8の時と同様JavaFXライブラリを参照する設定は不要です。

投稿2021/03/21 02:11

boochnich

総合スコア194

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

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

ryu-bamboo

2021/03/29 12:18

返信ありがとうございます 張っていただいた記事を参考になんやかんや弄り回してたらエラーがなくなりました!どうやって直したかあまりよくわかっていないので、いつか不具合が生じることもあると思いますが、その時も意見を頂けると嬉しいです。 *回答者さんはeclipseをお使いでないのでご存じないかもしれないですが、javafx11
ryu-bamboo

2021/03/29 12:19

用のe(fx)clipseをインストールしたところFXprojectが使えてしまいました、今度調べてみようと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問