2009-07-24 10 views
13

kod Java:Jak wywołać obiekty Scala z 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 Kod:

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

Linia komend:

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

To powinno działać w porządku. Co stanie się, gdy spróbujesz? – skaffman

+0

Nie wiedziałem, od czego zacząć, az tego, co czytałem przez Google, wydawało się to nieco bardziej skomplikowane. Cholernie stare posty (2008), cieszę się, że Scala była bardzo aktywnie rozwijana. Zaktualizowałem moje pytanie tym, co zrobiłem. – givanse

Odpowiedz

12

zacząłbym za pomocą java.util.Timer - nie javax.swing.Timer . Timer wahadłowy nie zadziała, dopóki nie uruchomisz aplikacji z GUI (tzn. Nie zadziała, jeśli uruchomisz ją na Linuksie za pośrednictwem konsoli bez specjalnego parametru wiersza poleceń - najlepiej tego unikać).

Ustawienie to na bok:

  1. Pamiętaj, że podczas próby uruchomienia kodu, dołączyć scala-library.jar na ścieżce klas.

  2. Nie zapomnij uruchomić stoper - timer.start()

Ten kod pracował dobrze dla mnie (kod Scala nie wymagało modyfikacji):

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

Zgodnie z jdk-6-doc tylko javax.swing.Timer otrzymuje ActionListener w swoim konstruktorze i potrzebuję go do wywołania innych akcji. – givanse

Powiązane problemy