Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala搜索一个模糊的主类_Scala_Scala Java Interop - Fatal编程技术网

Scala搜索一个模糊的主类

Scala搜索一个模糊的主类,scala,scala-java-interop,Scala,Scala Java Interop,我有一个简单的scala脚本,如下所示: object SaveTaggedSenseTask { def main(args: Array[String]) { val reader:SenseEvalAllWordsDocumentReader = new SenseEvalAllWordsDocumentReader() reader.parse(args(0))

我有一个简单的scala脚本,如下所示:

object SaveTaggedSenseTask {                                                    
  def main(args:  Array[String]) {
    val reader:SenseEvalAllWordsDocumentReader = new SenseEvalAllWordsDocumentReader()
    reader.parse(args(0))                                                   
    println(reader.sentences)                                               
    reader.sentences()
  }
}
senseevallallwordsdocumentreader
是一个java定义的类,它只是SAX解析器的包装器。调用语句只需返回另一个java定义的类(称为句子)的java列表。如果我使用

scala -cp jar-with-everything.jar SaveTaggedSenseTask.scala path/to/file.xml
我得到了以下糟糕的输出:

java.lang.ClassNotFoundException: Main (args = /home/stevens35/senseEval/senseEval3-allwords/english-all-words.xml, classpath = /tmp/scalascript7300484879512233483.tmp:/usr/java/jdk1.6.0_26/jre/lib/resources.jar:/usr/java/jdk1.6.0_26/jre/lib/rt.jar:/usr/java/jdk1.6.0_26/jre/lib/jsse.jar:/usr/java/jdk1.6.0_26/jre/lib/jce.jar:/usr/java/jdk1.6.0_26/jre/lib/charsets.jar:/home/stevens35/devel/src/scala-2.9.1.final/lib/jline.jar:/home/stevens35/devel/src/scala-2.9.1.final/lib/scala-compiler.jar:/home/stevens35/devel/src/scala-2.9.1.final/lib/scala-dbc.jar:/home/stevens35/devel/src/scala-2.9.1.final/lib/scala-library.jar:/home/stevens35/devel/src/scala-2.9.1.final/lib/scalap.jar:/home/stevens35/devel/src/scala-2.9.1.final/lib/scala-swing.jar:/usr/java/jdk1.6.0_26/jre/lib/ext/sunjce_provider.jar:/usr/java/jdk1.6.0_26/jre/lib/ext/sunpkcs11.jar:/usr/java/jdk1.6.0_26/jre/lib/ext/localedata.jar:/usr/java/jdk1.6.0_26/jre/lib/ext/dnsns.jar:/home/stevens35/devel/C-Cat/wordnet/.:/home/stevens35/devel/C-Cat/wordnet/target/extendOntology-wordnet-1.0-jar-with-dependencies.jar:/home/stevens35/devel/C-Cat/wordnet/../data/target/extendOntology-data-1.0.jar)                                               
        at scala.tools.nsc.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:103)                                                                 
        at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:33)
        at scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:40)
        at scala.tools.nsc.ScriptRunner.scala$tools$nsc$ScriptRunner$$runCompiled(ScriptRunner.scala:171)                                                       
        at scala.tools.nsc.ScriptRunner$$anonfun$runScript$1.apply(ScriptRunner.scala:188)                                                                      
        at scala.tools.nsc.ScriptRunner$$anonfun$runScript$1.apply(ScriptRunner.scala:188)                                                                      
        at scala.tools.nsc.ScriptRunner$$anonfun$withCompiledScript$1.apply$mcZ$sp(ScriptRunner.scala:157)                                                      
        at scala.tools.nsc.ScriptRunner$$anonfun$withCompiledScript$1.apply(ScriptRunner.scala:131)                                                             
        at scala.tools.nsc.ScriptRunner$$anonfun$withCompiledScript$1.apply(ScriptRunner.scala:131)                                                             
        at scala.tools.nsc.util.package$.waitingForThreads(package.scala:26)
        at scala.tools.nsc.ScriptRunner.withCompiledScript(ScriptRunner.scala:130)                                                                              
        at scala.tools.nsc.ScriptRunner.runScript(ScriptRunner.scala:188)
        at scala.tools.nsc.ScriptRunner.runScriptAndCatch(ScriptRunner.scala:201)                                                                               
        at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:58)                                                                            
        at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:80)
        at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:89)
        at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
我假设这意味着scala正在寻找一个名为Main的类,但找不到它,但我不明白为什么它会想到寻找这个。此外,如果我删除
reader.句子()
行,或者对其执行类似于调用
size()
的操作,问题就会消失。我只能猜测scala以某种方式推断,由于这个调用,名为Main的类应该存在,但我没有看到任何明显的解决方法


想法?非常感谢您的帮助。

您将Scala脚本和Scala程序混为一谈。使用
object
def main
时,应使用
scalac
编译程序,然后使用
scala
调用它,并传递包含
main
方法的
对象的名称

当作为脚本调用时,应该删除
对象
def main
,只需将程序放入。参数仍将位于
args


现在,Scala 2.9.1的一个特性是可以混合使用脚本和程序调用,但由于某些原因,它显然无法在这里工作。我建议您选择一种方法,并坚持下去。

您的脚本定义了对象SaveTaggedSenseTask,但不执行任何操作

加上

SaveTaggedSenseTask.main(args)

到脚本文件的末尾。或者你可以删除object和def语句,就像@daniel-c-sobral建议的那样。

谢谢你添加了框Rahul,我不知道我可以这么做!啊,很有趣。我对scala还是相当陌生,实际上不知道如何用fasion这样的脚本编写。此外,我尝试按照您的建议作为纯脚本运行,但仍然会抛出异常。但是,当我尝试用scalac编译它时,我得到了一个看起来更可怕的异常,它可以归结为句子正在使用的一些java类。我有一种感觉,这完全依赖于一些更深层次的依赖关系,不能在Scala中轻松使用这个库。不过,如果其他人遇到类似的问题,我会非常感兴趣。@fozziethebeat然后尝试将其编译为程序,并直接用“java”调用它。您只需在类路径中传递scala-library.jar。另外,当作为脚本运行时,尝试使用
-usejavacp
。@fozziethebeat我刚刚想到了一些东西。。。您是否使用jar文件的相对路径?如果你是,不要。使用绝对路径。@daniel-c-sobral遗憾的是,这两个建议似乎都不起作用。我不能用scalac编译程序,而且-usejavacp似乎没有太大变化。但是谢谢你的建议。现在,我想我只需要用java编写这个东西。