2013-08-26 32 views
6

stworzyłem program z Java i scala mieszane, ale mam do czynienia z błędem podczas próby wywołania java statyczną metodę z scala.Here kod:brak dostępu do statyczne metody Java z Scala

object GestionBasesScala { 

    def sors_tout_de_suite() { 

    application.launcher.append("SCALA : exit") 
    } 
} 

metoda append klasy wyrzutni jest tak (w Javie):

public static void append(String text) { 

    if (name_of_file != null && name_of_file != "") { 
     BufferedWriter bufWriter = null; 
     FileWriter fileWriter = null; 
     try { 
      fileWriter = new FileWriter(name_of_file, true); 
      bufWriter = new BufferedWriter(fileWriter); 
      // Ins�rer un saut de ligne 
      bufWriter.newLine(); 
      bufWriter.write(text); 
      bufWriter.close(); 
     } catch (IOException ex) { 
       //  Logger.getLogger(TextFileWriter.class.getName()).log(Level.SEVERE, 
      // null, ex); 
     } finally { 
      try { 
       bufWriter.close(); 
       fileWriter.close(); 
      } catch (IOException ex) { 
       // Logger.getLogger(TextFileWriter.class.getName()).log(Level.SEVERE, 
       // null, ex); 
      } 
     } 
    } 

} 

nie widzę, co może być błąd.

Olivier

+4

Co to jest komunikat o błędzie? –

Odpowiedz

3

Jeśli używasz Scala IDE/Eclipse, czasami w edytorze kompilator nie odbiera, gdy metody statyczne stać utworzony i/lub zaktualizowane.

Uruchamianie w projekcie powoduje, że błąd zniknie.

+1

wypróbowanie "czystego projektu" nie pomogło mi. Dzięki. – lolveley

+0

@lolveley: Szkoda. Zakładam, że masz zaznaczone pole "Kompiluj automatycznie"? –

+1

To rzeczywiście zadziałało dla mnie (Scala IDE - Eclipse) – yerlilbilgin

2

application.launcher nie wydaje się być nazwą klasy, czy na pewno tak jest? Czy nie powinno to być coś takiego jak LauncherClass.append("SCALA : exit")?

Edit1: Po potwierdzeniu poprawności nazwy klasy starałem podobne (nieco uproszczona) scenariusz, ale jestem w stanie odtworzyć zachowanie opisane w Q. następujący kod działa poprawnie (nie brakuje czegoś?):

package javastatic 

object ScalaCaller extends App { 
    def doStuff() { 
    javastatic.JavaProvider.append("Scala here") 
    } 

    doStuff() 
} 
package javastatic; 

public class JavaProvider { 
    public static void append(String text) { 
     System.out.println(text); 
    } 
} 

Pomocna może być wiadomość o błędzie z kompilatora. Proszę rozważ to opublikowanie.

+0

Cześć, pakiet jest aplikacją, nazwa klasy to launcher, a dołączam nazwę metody, jestem pewien. – lolveley

+0

Witam, chciałbym to opublikować, ale jest to niemożliwe, ponieważ program używa biblioteki o nazwie javaexe, która przekształca ją w usługę, i z tego powodu nie uzyskuje dostępu do konsoli (nie można używać println); Próbowałem przechwycić komunikat o błędzie z tym: – lolveley

+0

Oto kod: 'def sors_tout_de_suite() {try { val FileWriter = new FileWriter ("Dzienniki \\ zz.txt", true) val bufWriter = new BufferedWriter (FileWriter) próba { application.launcher.append ("SCALA") } haczyk { przypadku e: Wyjątek => bufWriter.append (e.getMessage()) } bufWriter.close() } haczyk { sprawa e: IOException => {} } } – lolveley

1

Należy zaimportować application.launcher._