2012-06-24 21 views
15

मेरे पास एक वर्चुअल मशीन है जो Windows XP SP3 32-बिट चल रही है। इस मशीन पर मैंने जावा एसई जेडीके 8 बिल्ड बी 44 डेवलपर पूर्वावलोकन here से स्थापित किया।लैम्ब्डा अभिव्यक्ति जावा 8 में काम नहीं करती है?

मैंने जावाएफएक्स 2.1 एसडीके भी स्थापित किया।

यह ठीक काम करता है:

java -version 
> java version "1.8.0-ea" 
> Java(TM) SE Runtime Environment (build 1.8.0-ea-b44) 
> Java HotSpot(TM) Client VM (build 24.0-b14, mixed mode, sharing) 

मैं निम्नलिखित प्रोग्राम (here से लिया गया) चलाने का भी प्रयास:

import javafx.application.Application; 
import javafx.beans.property.SimpleStringProperty; 
import javafx.beans.property.StringProperty; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.ButtonBase; 
import javafx.scene.control.ToggleButton; 
import javafx.scene.control.ToggleButtonBuilder; 
import javafx.scene.layout.BorderPane; 
import javafx.stage.Stage; 

public class LambdasWithJavaFx extends Application 
{ 
    public static void main(String[] args) 
    { 
     Application.launch(args); 
    } 

    @Override public void start(Stage stage) throws Exception 
    { 
     BorderPane root = new BorderPane(); 
     ToggleButton button = new ToggleButton("Click"); 
     final StringProperty btnText = button.textProperty(); 

     button.setOnAction(new EventHandler<ActionEvent>() 
     { 
      @Override public void handle(ActionEvent actionEvent) 
      { 
       ToggleButton source = (ToggleButton) actionEvent.getSource(); 
       if (source.isSelected()) 
       { 
        btnText.set("Clicked!"); 
       } 
       else 
       { 
        btnText.set("Click!"); 
       } 
      } 
     }); 

     root.setCenter(button); 
     Scene scene = new Scene(root); 
     stage.setScene(scene); 
     stage.setWidth(200); 
     stage.setHeight(200); 
     stage.show(); 
    } 
} 

कार्यक्रम संकलित और अपेक्षा के अनुरूप भाग गया।

मुझे लगता है कि लेख में निर्देशों का पालन किया है और इस के साथ बटन घटना से निपटने के कोड की जगह:

> lambda expressions are not supported in -source 1.8 
> (use -source 8 or higher to enable lambda expressions) 
:

button.setOnAction((ActionEvent event)-> 
{ 
    ToggleButton source = (ToggleButton) event.getSource(); 
    if (source.isSelected()) 
    { 
     btnText.set("Clicked!"); 
    } 
    else 
    { 
     btnText.set("Click!"); 
    } 
}); 

जब संकलन, मैं निम्न त्रुटि (लाइन button.setOnAction((ActionEvent event)-> पर) प्राप्त

मैंने तर्क -source 8 जोड़ा, कुछ भी नहीं बदला।

मैं चाहता था कि जावा 8 में लैम्ब्डा अभिव्यक्ति कार्यक्षमता की जांच करें। यह क्यों काम नहीं करता है?

+3

शायद कार्यान्वयन अभी तक पूरा नहीं हुआ है। क्या आपने रिलीज नोट्स की जांच की है? क्या वे कहते हैं कि लैम्बदास काम कर रहे हैं? वैसे भी, यह कुछ ऐसा है जो आपको जावा डेवलपर्स के साथ चर्चा करनी चाहिए ... प्रदान किए गए फीडबैक चैनलों का उपयोग करना (जो कुछ भी हो)। –

+0

@StephenC ठीक है, जेडीके/जेआरई 8 का यह संस्करण नवीनतम है जो मुझे मिल सकता है (रिलीज दिनांक: 21 जून 2012)। और मुझे कोड नमूना खोजने में 20 सेकंड लग गए, जिसका मतलब है कि वहाँ बहुत अधिक हैं। मुझे लगता है कि उन्हें काम करना चाहिए, शायद पूरी तरह से नहीं ... लेकिन डेवलपर पूर्वावलोकन संस्करणों को जारी क्यों रखें यदि सबसे महत्वपूर्ण विशेषता मौजूद नहीं है? –

+0

संकलक ने शिकायत की कि आपके पास तर्कों में 'स्रोत 1.8' है। क्या आपने उस तर्क को संपादित किया था, या शाब्दिक रूप से "तर्क '-सोर्स 8' जोड़ें"? क्या यह हो सकता है कि आपके पास 'javac' कमांड लाइन पर पूर्ण नियंत्रण न हो ताकि अमान्य तर्क अभी भी वहां हो? –

उत्तर

28

आपको लम्बाई अभिव्यक्ति सुविधा वाले बाइनरी डाउनलोड करने की आवश्यकता है। http://jdk8.java.net/lambda/ से डाउनलोड करने का प्रयास करें। मुझे मेलिंग सूची में पढ़ना याद है कि लैम्ब्डा अभिव्यक्ति शाखा मुख्य जेडीके 8 निर्माण में विलय हो रही है, लेकिन यह सुनिश्चित नहीं है कि यह किया गया है या नहीं। लेकिन मैं Lambda परियोजना पृष्ठ से निर्माण का उपयोग करें।

+0

धन्यवाद, मैं इसे आज़मा दूंगा। –

+0

यह काम किया, धन्यवाद। जिस तरह से इन रिलीज को संरचित किया गया है वह थोड़ा अजीब है ... क्यों एक जेडीके 8 को लैम्बडास के साथ छोड़ दिया जाता है और बिना किसी के? आईएमओ के लिए अतिरिक्त काम नहीं। –

+1

इसकी अधिकतर है कि कई परियोजनाएं समानांतर में विकसित की जाती हैं और फिर एक बार स्थिर होने के बाद, वे मुख्य जेडीके लाइन में विलय हो जाते हैं। हां इसका अतिरिक्त काम है, लेकिन कल्पना करें कि सभी परियोजनाएं मुख्य कोड पर उनके कोड को विलय कर रही हैं? यह प्रोजेक्ट लीड और दूसरों के लिए बदलावों का प्रबंधन करने के लिए केवल अराजकता और मुश्किल होगी। – MohamedSanaulla

2

http://jdk8.java.net/lambda/ रिलीज़ के विकल्प के रूप में, http://jdk8.java.net/download.html से डीएमजी, एक्सई इंस्टॉलर और tar.gz फॉर्म में जेडीके 8 और जेआरई 8 स्नैपशॉट रिलीज भी उपलब्ध हैं।

ये jdk8 डेवलपर स्नैपशॉट्स में अब भी लैम्ब्डा (और javafx8) कार्यक्षमता शामिल है। इस लेखन के अनुसार, jdk8 के लिए lambda और javafx दोनों अभी भी फीचर और बग फिक्स डेवलपमेंट मोड में हैं।

मैं ने पाया http://jdk8.java.net/download.html साप्ताहिक उपयोगी और विकास के लिए उपयोगी बनाता है (उन्हें प्रयोग कार्यक्रमों कभी कभी पर मेरे मैक दुर्घटना होगा, तो यह निश्चित रूप से कुछ आप भले ही के लिए ओरेकल लाइसेंस की अनुमति बनाता उत्पादन करने के लिए तैनात करने के लिए चाहते हो जाएगा नहीं है जो वे नहीं करते हैं)।

यदि आप पूर्ण नवीनतम खून बहने वाले किनारे या अनुकूलित जेडीके बिल्ड चाहते हैं, तो आप obuildfactory का उपयोग कर अपना स्वयं का निर्माण कर सकते हैं। इस तरह के निर्माण ओरेकल जेडीके लाइसेंसिंग मॉडल की बजाय ओपनजेडीके लाइसेंसिंग मॉडल का उपयोग करते हैं, जो कुछ विकास परियोजनाओं के लिए बेहतर हो सकता है, हालांकि, व्यक्तिगत रूप से, जब मैं कर सकता हूं तो ओरेकल जेडीके बनाता है।

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