2013-08-26 9 views
6

Ho creato un programma con Java e Scala mista, ma mi trovo di fronte ad un errore durante il tentativo di chiamare un metodo statico di Java dal scala.Here è il codice:non ha accesso ad un metodo statico di Java da Scala

object GestionBasesScala { 

    def sors_tout_de_suite() { 

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

il metodo append della classe launcher è come questo (in java):

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); 
      } 
     } 
    } 

} 

non vedo che cosa potrebbe essere l'errore.

olivier

+4

Qual è il messaggio di errore? –

risposta

3

Se stai usando Scala IDE/Eclipse, a volte l'in-editor di compilatore non scegliere quando i metodi statici diventano creato e/o aggiornati.

L'esecuzione di "Clean..." sul progetto fa scomparire l'errore.

+1

provare un "progetto pulito" non mi ha aiutato.grazie comunque – lolveley

+0

@lolveley: è un peccato. Suppongo che tu abbia selezionato "Crea automaticamente"? –

+1

Questo ha funzionato per me (Scala IDE - Eclipse) – yerlilbilgin

2

application.launcher non sembra un nome di classe, sei sicuro che sia? Non dovrebbe essere qualcosa come LauncherClass.append("SCALA : exit")?

Edit1: Dopo la conferma del nome della classe correttezza ho provato simile (una versione semplificata bit) scenario, ma sono in grado di riprodurre il comportamento descritto in Q. Dopo codice funziona bene (mi sono perso qualcosa?):

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); 
    } 
} 

Il messaggio di errore del compilatore può essere d'aiuto. Si prega di prendere in considerazione la pubblicazione.

+0

ciao, il pacchetto è application, il nome della classe è launcher e append è il nome del metodo, ne sono sicuro. – lolveley

+0

ciao, vorrei postarlo ma è impossibile perché il programma usa una libreria chiamata javaexe che lo trasforma in un servizio, e per questo non ottiene l'accesso alla console (non è permesso stampare); Ho cercato di intercettare il messaggio di errore con questo: – lolveley

+0

Ecco il codice: 'def sors_tout_de_suite() {try { val FileWriter = new FileWriter ("log \\ zz.txt", true) val bufWriter = new BufferedWriter (FileWriter) try { application.launcher.append ("SCALA") } catch { caso e: eccezione => bufWriter.append (e.getMessage())} bufWriter.close() } catch { case e: IOException => {} } } ' – lolveley

1

Devi importare application.launcher._

Problemi correlati