2015-06-07 15 views
9

Kodum aşağıda. Benim için iyi bir şekilde derler ama profesörüm hata yaptığını söylüyor çünkü sınıfımın finalinde birkaç değişkenim yok. Eclipse makinemde bununla ilgili bir sorun yok gibi görünüyor, bu yüzden göremediğim şeyleri düzeltmek nasıl yanlıştır bilmiyorum.Neden bir program benim için derler ama başka biri için değil?

Bazı değişken iç içe sınıflarında çalışmak nihai olması gerektiğini anlıyorum ama oluşturduk olanlar gayet nihai ya da değil çalışmıyor gibi görünüyor. isteyebilir ActionListener olarak

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

Java'yı 7 kullanıyorsunuz> ve profesörün Java 6 kullandığını < – MadProgrammer

+2

@MadProgrammer: Onlar Java 8 kullanıyorsanız, ve sorumlu öğretim Java 7 veya daha düşük kullanıyor fazla gibi. – Makoto

+1

@Makoto Muhtemelen, Java 7: P'yi atladım – MadProgrammer

cevap

21

İç sınıflar, bunu içeren kapsamından olmayan final değişkenleri erişemez. Java sürümlerinde 8'den az, derleyici bu durumla karşılaşırsa otomatik olarak bir hata atar.

Java 8'de, derleyici sadece değişkenleri yapacak final onlar dosyanızın herhangi değiştirilmez ise, seninki burada değil gibi. Daha fazla bilgi için

, this post bkz.

Muhtemelen, profesörün böylece kod derleme değil, Java 7 veya daha eski kullanıyor. Sadece iç sınıfınızda kullandığınız yerel değişkenleri final yapın.

İlgili konular