2016-05-24 4 views
0

私はScalaFXアプリケーションを持っています。私は自分のビューにFXMLを使用しています。私は、コントローラにビューを接続するのにひどい時を過しています。 Githubの例を除いて、私は多くの情報をオンラインで見つけることができません。そして、私がGithubの仕組みを模倣しようとしても、それは機能しません。 FXMLで接続する方法は次のとおりです。コントローラ:ScalaFXMLアプリケーションがコントローラを見つけることができません

imports... 

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="520.0" minWidth="880.0" prefHeight="520.0" 
      prefWidth="880.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" 
      fx:controller="scala/scalafxml/ToolbarController"> 
<center.... 

ここに私のコントローラクラスがある...

@sfxml 
class ToolbarController extends JFXApp { 
    //open new form 
    def newForm = { 
    val resource = getClass.getResource("/scala/scalafxml/form.fxml") 

スタックトレースは、それが特異的FXで参照されるコントローラクラスを見つけることができないと言います。ここにあります。

Exception in Application start method 
Workaround until RT-13281 is implemented: keep toolkit alive 
[error] (run-main-0) java.lang.RuntimeException: Exception in Application start method 
java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$152(LauncherImpl.java:182) 
    at com.sun.javafx.application.LauncherImpl$$Lambda$9/777613804.run(Unknown Source) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: javafx.fxml.LoadException: 
/Users/patrickslagle/scala/MyApps/PattyCakesWorksheet/target/scala-2.10/classes/scalafxml/calendar.fxml:9 

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2605) 
    at javafx.fxml.FXMLLoader.access$700(FXMLLoader.java:104) 
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:918) 
    at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:967) 
    at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:216) 
    at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:740) 
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2711) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2531) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2445) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3218) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3179) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3152) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3128) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3108) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3101) 
    at FXMLMain$delayedInit$body.apply(FXMLMain.scala:16) 
    at scala.Function0$class.apply$mcV$sp(Function0.scala:40) 
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12) 
    at scalafx.application.JFXApp$$anonfun$init$1.apply(JFXApp.scala:297) 
    at scalafx.application.JFXApp$$anonfun$init$1.apply(JFXApp.scala:297) 
    at scala.collection.immutable.List.foreach(List.scala:318) 
    at scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:32) 
    at scala.collection.mutable.ListBuffer.foreach(ListBuffer.scala:45) 
    at scalafx.application.JFXApp$class.init(JFXApp.scala:297) 
    at FXMLMain$.init(FXMLMain.scala:10) 
    at scalafx.application.AppHelper.start(AppHelper.scala:33) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$159(LauncherImpl.java:863) 
    at com.sun.javafx.application.LauncherImpl$$Lambda$60/206252937.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$172(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$56/1146564181.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$170(PlatformImpl.java:295) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$58/354390534.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$171(PlatformImpl.java:294) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$57/1198063642.run(Unknown Source) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
Caused by: java.lang.ClassNotFoundException: scala/scalafxml/ToolbarController 
    at java.lang.ClassLoader.findClass(ClassLoader.java:530) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
[trace] Stack trace suppressed: run last compile:run for the full output. 
java.lang.RuntimeException: Nonzero exit code: 1 
    at scala.sys.package$.error(package.scala:27) 
[trace] Stack trace suppressed: run last compile:run for the full output. 
[error] (compile:run) Nonzero exit code: 1 
[error] Total time: 11 s, completed May 24, 2016 3:32:56 PM 

FXMLファイルは、SRC /メイン/リソース/ scalafxml/calendar.fxmlで発見され、コントローラは、Src /メイン/スカラ/ scalafxml/ToolbarController.scalaです。

私はScalaでかなり緑色なので、明らかに間違っているかもしれません。どんな指針も大変ありがとうございます。

+1

私はScalaについてはあまりよく分かりませんが、 'fx:controller'のパッケージリファレンスは有効なクラス指定でなければなりません(例:'/'の代わりに' .'を使うべきです。クラス)。あなたのコントローラがどんなパッケージに入っているのかわかりませんが、 'scalafxml'という名前のパッケージだと仮定します。したがって、完全な参照は' scalafxml.ToolbarController'になります。 'scala.scalafxml.ToolbarController'は' scala'システムライブラリのために 'scala'パッケージが予約されていると思いますが、ユーザアプリケーションのコードではありません。 – jewelsea

+2

また、通常はコントローラーがアプリケーションを拡張しないように、「ToolbarController extends JFXApp'」を望んでいるとは思えません。あるいは、JavaFXランチャーによってアプリケーションインスタンスが作成され、別のコントローラーインスタンスがFMXLLoader。 – jewelsea

+2

JavaFXの使い方と使い方が分かるまで、あなたのJavaFXアプリケーションをJavaでコード化することをお勧めします。つまり、あなたがどちらか一方に精通していることを確認し、JavaFXとScalaの両方を同時に習得しようとしないでください。私の迷惑な意見です。 – jewelsea

答えて

2

は、このスタンドアロンの例を見てみましょう: https://github.com/vigoo/scalafxml-unit-converter-example

あなたは別々のコントローラクラスとJFXAppを持っている、とビューを作成するためにScalaFXMLからFXMLViewコンストラクタを使用する必要があります。

関連する問題