2015-06-07 3 views
9

मेरा कोड नीचे है। यह मेरे लिए ठीक संकलित करता है, हालांकि मेरे प्रोफेसर कह रहे हैं कि उन्हें एक त्रुटि मिल रही है क्योंकि मेरे पास मेरी कक्षा घोषित फाइनल में कुछ चर नहीं हैं। ग्रहण में मेरी मशीन पर कोई समस्या नहीं प्रतीत होती है, इसलिए मुझे नहीं पता कि मैं जो नहीं देख सकता उसे ठीक करना गलत है।एक कार्यक्रम मेरे लिए क्यों संकलित होगा, लेकिन किसी अन्य व्यक्ति के लिए नहीं?

मैं समझता हूं कि कुछ परिवर्तनीय नेस्टेड कक्षाओं में काम करने के लिए अंतिम होने की आवश्यकता है, लेकिन जो मैंने बनाया है, वे ठीक, अंतिम या नहीं काम करते हैं। जैसे आपका ActionListener रूप

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.EventQueue; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.EmptyBorder; 
import javax.swing.JButton; 

import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.util.Random; 

public class JColorFrame extends JFrame { 

    private JPanel contentPane; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        JColorFrame frame = new JColorFrame(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public JColorFrame() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 522, 339); 
     contentPane = new JPanel(); 
     contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
     contentPane.setLayout(new BorderLayout(0, 0)); 
     setContentPane(contentPane); 

     JPanel panel = new JPanel(); 
     contentPane.add(panel, BorderLayout.NORTH); 

     JPanel panel_1 = new JPanel(); 
     contentPane.add(panel_1, BorderLayout.WEST); 

     JPanel panel_2 = new JPanel(); 
     contentPane.add(panel_2, BorderLayout.EAST); 

     JPanel panel_3 = new JPanel(); 
     contentPane.add(panel_3, BorderLayout.SOUTH); 

     Color[] color = new Color[8]; 
     color[0] = Color.black; 
     color[1] = Color.white; 
     color[2] = Color.red; 
     color[3] = Color.blue; 
     color[4] = Color.green; 
     color[5] = Color.yellow; 
     color[6] = Color.magenta; 
     color[7] = Color.orange; 

     JButton btnChangeColor = new JButton("Change Color"); 
     btnChangeColor.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       Random random = new Random(); 
       int random_1 = random.nextInt(4); 
       switch (random_1) { 
        case 0: 
         int random_2 = random.nextInt(8); 
         panel.setBackground(color[random_2]); 
         break; 
        case 1: 
         random_2 = random.nextInt(8); 
         panel_1.setBackground(color[random_2]); 
         break; 
        case 2: 
         random_2 = random.nextInt(8); 
         panel_2.setBackground(color[random_2]); 
         break; 
        case 3: 
         random_2 = random.nextInt(8); 
         panel_3.setBackground(color[random_2]); 
         break; 

       } 

      } 
     }); 

     contentPane.add(btnChangeColor, BorderLayout.CENTER); 
    } 
} 
+6

आप जावा 7 का उपयोग कर रहे हैं> और आपका प्रोफेसर जावा 6 < – MadProgrammer

+2

@ मैडप्रोग्रामर का उपयोग कर रहा है: ऐसा लगता है कि वे जावा 8 का उपयोग कर रहे हैं, और उनके प्रोफेसर जावा 7 या उससे कम का उपयोग कर रहे हैं। – Makoto

+1

@ मकोटो शायद, मैं जावा 7: पी छोड़ दिया – MadProgrammer

उत्तर

21

इनर कक्षाएं, गुंजाइश है कि यह होता है से गैर final चर का उपयोग नहीं कर सकते हैं। 8 से कम जावा संस्करणों में, यदि संकलक इस स्थिति से मुकाबला करता है तो संकलक स्वचालित रूप से एक त्रुटि फेंक देगा।

जावा 8 में, कंपाइलर केवल final को चर बना देगा यदि वे फ़ाइल में कहीं भी नहीं बदला गया है, क्योंकि आपका यहां नहीं है।

अधिक जानकारी के लिए, this post देखें।

शायद, आपका प्रोफेसर जावा 7 या पुराने का उपयोग कर रहा है, इसलिए आपका कोड संकलित नहीं हो रहा है। बस अपनी आंतरिक कक्षा final में उपयोग करने वाले किसी भी स्थानीय चर को बनाएं।

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

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