2012-11-06 11 views
6

Sto lavorando su un progetto che utilizzano Scala 2.9.2 e Java 7.Utilizzando ListView da Scala 2.9.2 con Java 7 dà errore di compilazione

Quello che sto cercando di fare è creare una GUI utilizzando il scala ListView.

Ecco un piccolo frammento di codice:

private val listView = new ListView[Document](someList) 
. 
. 
. 
for (selectedDocument <- listView.peer.getSelectedValuesList) { 
    doSomething(selectedDocument) 
} 

Questo mi dà il seguente errore di compilazione:

error: something is wrong (wrong class file?): class JList with type parameters [E] gets applied to arguments [], phase = namer for (selectedDocument <- listView.peer.getSelectedValuesList) { 

Sto indovinando Questo perché in ListView, pari viene definito senza parametro di tipo:

override lazy val peer: JList = new JList with SuperMixin 

Quindi la domanda è: è impossibile usare il ListView da scala-swing wi th Java 7?

risposta

3

risolto questo problema estendendo ListView di Scala e l'aggiunta di un "pari digitato".

class ExtendedListView[A: ClassManifest] extends ListView[A] { 
    lazy val typedPeer: JList[A] = peer.asInstanceOf[JList[A]] 

    def selectionEmpty = typedPeer.isSelectionEmpty 

    // Other functions omitted 
} 

Funziona alla grande!

1

Il problema è che molti componenti dello swing sono stati "generati" in Java 7, causando incompatibilità. La scala libreria è stata sicuramente compilata verso una versione di Java < 1.7. Ti consiglierei di compilare il tuo scala codice contro Java 1.6. Puoi ancora compilare il tuo codice Java in Java 1.7 e usarlo dal tuo codice scala, e nel codice aggiuntivo compilato su Java 1.6 può essere eseguito su una JVM 1.7.

UPDATE: qualcuno inciampato contro lo stesso problema: http://comments.gmane.org/gmane.comp.lang.scala.debate/9158

+0

A male questo non è stato ancora risolto in Scala. L'utilizzo di Listview nella mia app richiederebbe ai miei utenti di avere jre6 o mi manca qualcosa? – ulejon

+0

Per quanto ne so, questo non è corretto. Il codice compilato su Java 1.6 può benissimo essere eseguito su una JVM versione 1.7 (è il contrario che non funzionerà). –

0

Ho scritto una piccola libreria SwingPlus che consente di utilizzare uno ListView sia durante la compilazione su Java 6 e Java 7+. Il problema (come altri hanno sottolineato) è la generazione di Swing in Java 7.

Problemi correlati