2012-11-06 11 views
6

मैं एक परियोजना है कि स्केला 2.9.2 और जावा का उपयोग पर काम कर रहा हूँ 7.जावा 7 के साथ स्काला 2.9.2 से ListView का उपयोग देता है संकलन त्रुटि

मुझे क्या करना कोशिश कर रहा हूँ है का उपयोग करते हुए एक जीयूआई बनाने स्कैला ListView।

यहां एक छोटा कोड स्निपेट है: क्योंकि ListView में, सहकर्मी के बिना प्रकार पैरामीटर परिभाषित किया गया है

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

मैं इस अनुमान लगा रहा हूँ है::

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

यह मैं निम्नलिखित संकलन त्रुटि देता है

override lazy val peer: JList = new JList with SuperMixin 

तो प्रश्न यह है: स्केल-स्विंग वाई से ListView का उपयोग करना असंभव है वें जावा 7?

उत्तर

3

स्काला के ListView का विस्तार और एक "टाइप सहकर्मी" जोड़कर इस मुद्दे हल।

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

    def selectionEmpty = typedPeer.isSelectionEmpty 

    // Other functions omitted 
} 

बढ़िया काम करता है!

1

समस्या यह है कि कई स्विंग घटकों को जावा 7 में "जेनरेट" किया गया है, जिससे असंगतताएं आती हैं। स्कैला लाइब्रेरी निश्चित रूप से जावा < 1.7 के संस्करण की ओर संकलित की गई थी। मैं जावा 1.6 के खिलाफ अपने स्कैला कोड को संकलित करने की सलाह दूंगा। आप अभी भी जावा 1.7 में जावा कोड संकलित कर सकते हैं और इसे अपने स्कैला कोड से उपयोग कर सकते हैं, और जावा 1.6 के विरुद्ध संकलित अतिरिक्त कोड में एक जेवीएम 1.7 पर चलाया जा सकता है।

अद्यतन: किसी एक ही समस्या के खिलाफ ठोकर खाई: http://comments.gmane.org/gmane.comp.lang.scala.debate/9158

+0

खराब होने के लिए अभी तक स्कैला में तय नहीं किया गया है। मेरे ऐप में लिस्टव्यू का उपयोग करने के लिए मेरे उपयोगकर्ताओं को jre6 होना चाहिए, या क्या मुझे कुछ याद आ रहा है? – ulejon

+0

जहां तक ​​मुझे पता है, यह गलत है। जावा 1.6 के खिलाफ संकलित कोड बहुत अच्छी तरह से एक जेवीएम संस्करण 1.7 पर चलाया जा सकता है (यह एक और तरीका है जो काम नहीं करेगा)। –

0

मैंने एक छोटी लाइब्रेरी SwingPlus लिखा है जो जावा 6 और जावा 7+ पर संकलन करते समय ListView दोनों का उपयोग करना संभव बनाता है। समस्या (जैसा कि अन्य ने बताया है) जावा 7 में स्विंग का जनरेशन है।

संबंधित मुद्दे