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

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

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

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

Q&A

解決済

1回答

5424閲覧

JavaFXの質問です。

hisatoshi_y

総合スコア37

JavaFX

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

0グッド

0クリップ

投稿2015/01/10 07:42

JavaFXのアプリケーションを使って色々しようとしています。

別クラスのmain文のなかからApplicationを継承したクラスを呼びだそうとしたのですが、
その別クラスがサブクラスではないとエラーが起きました。

別クラスからアプリケーションを呼び出すことはできないんでしょうか?
方法がアレば回答をよろしくお願いします。

lang

1public class SampleMain { 2 3 public static void main(String... args) { 4 myApplication myapp = new myApplication(); 5 myapp.launch(args); 6 } 7}

エラー内容
Exception in thread "main" java.lang.RuntimeException: Error: class SampleMain is not a subclass of javafx.application.Application
at javafx.application.Application.launch(Application.java:254)

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

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

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

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

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

guest

回答1

0

ベストアンサー

Application.launchメソッドは、インスタンスメソッドではなく、クラスメソッドです。
myapp.launch(args)のように、インスタンスメソッドとして呼び出されるようには作られていません。

回避するには、引数が2つのオーバーロードメソッドを使います。

lang

1// main関数 2Application.launch(MyApplication.class, args);

補足:launchメソッドは、launchメソッドを呼び出したメソッドが所属するクラス(今回の場合はSampleMainクラス)をApplicationのサブクラスと判断してJavaFXアプリケーションを起動しようとします。
このため、他のクラスからlaunchメソッドを使って呼び出そうとすると、そのエラーが出てしまいます。

参考URL:
Application.launch(Class, String...) (JavaFX 8 API Document)


(追記に対する回答)

コンストラクターに指定することは、正規の方法では難しいようです。

Applicationのサブクラスにパラメーターを渡すには、Application#initメソッドの中でgetParametersメソッドを呼び出すことで、launchで指定したargsパラメーターを取得することができます。

上に挙げたリンクのページの先頭に、Application.launchが呼ばれた時の内部動作について書かれていますのでそちらも参考にしてください。
また、getParametersで取得できるParametersクラスについては、Application.Parameters (JavaFX 8)を参照。

lang

1// importは省略 2 3public final class SampleMain { 4 5 public static void main(String[] args) { 6 Application.launch(MyApplication.class, "arg1", "arg2"); 7 } 8 9} 10 11public final class MyApplication extends Application { 12 13 @Override 14 public void init() throws Exception { 15 Parameters parameters = getParameters(); 16 List<String> parameterList = parameters.getRaw(); 17 // => [arg1, arg2] 18 } 19 20 // 以下略 21 22}

投稿2015/01/10 09:42

argius

総合スコア9390

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

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

argius

2015/01/12 13:10

追記分の回答を回答欄に追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問