2009-07-24 16 views
13

Java-Code:Wie rufen Sie Scala-Objekte von 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 Code:

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

Befehlszeile:

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

Es sollte funktionieren fein. Was passiert, wenn Sie es versuchen? – skaffman

+0

Ich wusste nicht, wo ich anfangen sollte und von dem, was ich durch Google-Ing gelesen habe, schien es ein bisschen komplexer. Damn OLD posts (2008), ich bin froh, dass Scala sich sehr aktiv entwickelt hat. Ich habe meine Frage mit dem, was ich getan habe, aktualisiert. – givanse

Antwort

12

ich mithilfe von java.util.Timer beginnen würde - nicht javax.swing.Timer . Der Swing-Timer funktioniert nur, wenn Sie Ihre App mit einer GUI ausführen (dh, sie funktioniert nicht, wenn Sie sie unter Linux über eine Konsole ohne einen speziellen Befehlszeilenparameter ausführen - am besten vermeiden).

Einstellung, die zur Seite:

  1. Seien Sie sicher, dass, wenn Sie versuchen, den Code auszuführen, Sie scala-library.jar auf Ihrem Classpath enthalten.

  2. Vergessen Sie nicht, den Timer zu starten - timer.start()

Dieser Code hat gut funktioniert für mich (die Scala-Code erforderlich keine Änderung):

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

Gemäß dem jdk-6-doc empfängt nur javax.swing.Timer einen ActionListener in seinem Konstruktor und ich brauche ihn, um einige andere Aktionen auszulösen. – givanse