我刚开始学习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脚本)?
答案 0 :(得分:4)
问题是Scala脚本运行器正在寻找脚本文件中的main方法,但它找不到。
找不到它的原因是因为你从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)"
答案 1 :(得分:2)
如果要从命令行运行它,请在文件底部添加对main的显式调用:
SimpleSwingApp.main(Array())
如果先用scalac编译它,然后运行,它将在没有显式调用main的情况下工作。