3

私は Scala の学習を始めたばかりで、そのプロセスの一環として、Swing を使用するいくつかの簡単なスクリプトを作成しようとしています。

これは、私が見ている問題を示す非常に簡素化された例です。

SimpleSwingApp:

import scala.swing._
object SimpleSwingApp extends SimpleSwingApplication {
  def top = new MainFrame {
    println ("Starting")
    title = "First Swing App"
    contents = new Button { text = "Click me" }
  }
}

Eclipse Scala IDE を介してスクリプトを Scala アプリケーションとして実行すると、すべてが期待どおりに機能します。予想される「Starting」テキストが Eclipse コンソールに出力され、小さな GUI がポップアップしてクリックを待ちます。

コマンドラインからスクリプトとして実行しようとすると、何も得られません。

> scala SimpleSwingApp.scala

エラーメッセージも、「開始」も、GUI もありません。

では、何が起こっているのでしょうか? また、どうすれば目的の結果を得ることができるでしょうか (つまり、コマンド ラインから Scala GUI スクリプトを開始するなど)?

4

2 に答える 2

4

問題は、Scala スクリプト ランナーがスクリプト ファイル内のメイン メソッドを探しているのに、見つからないことです。

見つからない理由は、SimpleSwingApplication から main を継承しているためです。そのため、スクリプト ファイルに main メソッドがありません。

次のように、super.main をすぐに呼び出す main メソッドをスクリプトに追加することで、この問題を回避できます。

import scala.swing._
object SimpleSwingApp extends SimpleSwingApplication {

  override def main(args: Array[String]) = super.main(args)

  def top = new MainFrame {
    println("Starting")
    title = "First Swing App"
    contents = new Button { text = "Click me" }
  }
}

これで、スクリプトは Scala IDE でエラーを発生させなくなり、呼び出して実行できます。

scala SimpleSwingApp.scala 

審美性が低いのではなく

scala -i SimpleSwingApp.scala -e "SimpleSwingApp.main(args)"
于 2012-08-24T20:53:49.143 に答える
2

コマンド ラインから実行する場合は、ファイルの末尾に main への明示的な呼び出しを追加します。

SimpleSwingApp.main(Array())

これを最初に scalac でコンパイルしてから実行すると、main を明示的に呼び出さなくても動作します。

于 2012-08-23T18:56:13.817 に答える