【问题标题】:How do you call Scala objects from Java?你如何从 Java 中调用 Scala 对象?
【发布时间】:2010-11-13 20:16:18
【问题描述】:

Java 代码:

import javax.swing.Timer;
class Main { 
    public static void main(String args[]) {
    MyListener myListener = new MyListener();
        Timer timer = new Timer(1000, myListener);
    timer.start();
        while(timer.isRunning()) {
            System.out.print(".");
        }
    }
}

Scala 代码:

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
class MyListener extends ActionListener {
    override def actionPerformed(arg0: ActionEvent) {
        println("Do something");  
    }
}

命令行:

scalac MyListener.scala
javac Main.java
java -cp /usr/share/java/scala-library.jar:. Main

【问题讨论】:

  • 它应该可以正常工作。当你尝试时会发生什么?
  • 我不知道从哪里开始,从我通过谷歌阅读的内容来看,它似乎有点复杂。该死的旧帖子(2008 年),我很高兴 Scala 一直处于非常积极的发展之中。我用我所做的更新了我的问题。

标签: java scala


【解决方案1】:

我首先使用 java.util.Timer - 而不是 javax.swing.Timer。除非您使用 GUI 运行应用程序,否则摆动计时器将不起作用(即,如果您通过没有特殊命令行参数的控制台在 Linux 上运行它,它将不起作用 - 最好避免使用)。

把它放在一边:

  1. 请确保,当您尝试运行代码时,您的类路径中包含 scala-library.jar。

  2. 别忘了启动定时器——timer.start()

这段代码对我来说很好用(Scala 代码不需要修改):

MyListener myListener = new MyListener();
Timer timer = new Timer(1000, myListener);
timer.start();
Thread.sleep(10000);

【讨论】:

  • 根据 jdk-6-doc,只有 javax.swing.Timer 在其构造函数中接收到一个 ActionListener,我需要它来触发其他一些操作。
猜你喜欢
  • 2016-02-21
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
相关资源
最近更新 更多