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 应用程序运行脚本时,一切都按预期工作。我将预期的“开始”文本打印到 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 回答