java.lang.NoSuchMethodError:使用Eclipse Scala插件启动HelloWorld时的main

时间:2009-07-16 06:23:31

标签: eclipse scala

我刚刚使用Scala,并按http://www.scala-lang.org/node/94所述安装了Eclipse插件,但在进入“Hello World”测试示例并按照描述设置运行配置后,我收到以下错误

Exception in thread "main" java.lang.NoSuchMethodError: main

供参考,代码为

package hello

object HelloWorld extends Application {
  println("Hello World!")
}

我使用明显的解决方案(添加一个main方法,使用main方法添加一个singleton对象),但我显然做错了。

任何人都可以让他们的测试示例工作,或指出我做错了吗?

11 个答案:

答案 0 :(得分:4)

我昨晚遇到了同样的问题。我修复了它a)删除任何现有的scala运行配置,然后通过(我不是在开玩笑)在第一个花括号之前添加一个换行符。

我做的另一件事就是进入现有的运行配置并在“arguments”选项卡中添加一些垃圾。我无论如何都忽略了这些论点,所以它并没有影响程序的输出,但它让插件再次找到了主要的

答案 1 :(得分:4)

我也用下面的代码点击了这个错误:

package hello

class HelloWorld extends Application {
  Console.println("Hello World!")
}

错误是使用class而不是object,当我切换到object时,它在Eclipse中运行良好。

答案 2 :(得分:2)

我通过清理项目来解决问题,然后使用main方法转到类并使用strg + s构建它(自动构建)。像魅力一样。

答案 3 :(得分:2)

这有点难看,但你可以放置

package hello

object HelloWorld {
  def main(args:Array[String]) {
    println("Hello World!")
  }
}

在文件HelloWordSrc.scala中(或者你喜欢的任何内容而不是尾随的“Src”),也许清理项目一次,然后Eclipse应该运行它。 “扩展应用程序”在Eclipse中从未对我有用,但插件在代码中查找主要方法,由于某种原因,该方法不能与文件名称指定的名称相同

欢呼声

答案 4 :(得分:2)

有完全相同的问题。我的解决方案是:

  • 转到“运行” - >“运行配置”
  • 创建新的JavaApplication配置,手动指定完整的类名(例如hello.HelloWorld)
  • 申请并运行

应该是它。

修改

关于问题的原因,IMHO Eclipse正在寻找要执行的文件HelloWorld.class。但是,它应该寻找的是HelloWorld $ .class(或者相反)。但这种假设可能是错误的......

答案 5 :(得分:2)

我遇到了同样的问题。以下是我修复它的方法:右键单击您的项目,选择“properties-> Java Build Path”,您可以看到“Default output folder”是“您的项目/ bin ”。将其更改为“您的项目/ ”,然后清理并重建您的项目。一些抱怨可能仍会出现,但它会通过 - 只需确保在“classes”文件夹下生成已编译的“.class”文件

我怀疑它与底层Java的执行引擎/配置有关。不太确定,因为我不熟悉Java。

答案 6 :(得分:1)

Scala插件有点不稳定。尝试关闭并重新打开项目,这通常会有所帮助。

答案 7 :(得分:1)

不幸的是,你没有做错任何事。 Scala的Eclipse插件已经过了更好的日子,但它已被重写以利用最近的一些功能来实现更好的集成,而且目前的版本是错误的。

现在,我推荐NetBeans。或IDEA,如果你有钱的话。

答案 8 :(得分:1)

Netbeans工作〜好但也有问题。现在我有一个很好的Eclipse 3.4 + Scala Plugin 2.7.5 Final工作得非常好。我建议你干净安装Eclipse 3.4,Scala 2.7.5,清理你的项目等。 您是否使用Scala项目创建者创建了项目?即创建新项目 - > Scala项目? 当然,如果没有别的办法对你有用的话,这一切都是可以的。

答案 9 :(得分:0)

如果您使用最新版本的scala(2.9。*),则应使用

object HelloWorld extends App {
  println("Hello World!")
}

应用程序,而非应用程序。申请是2.8或2.7的方式。这是唯一的问题是另一个问题。

答案 10 :(得分:-3)

简单回答: 如果您使用(NetBeans或Eclips)只需重新启动程序 其他 将类移动到它可能有帮助的另一个类