2015-06-07 38 views
9

Mã của tôi ở bên dưới. Nó biên soạn tốt cho tôi, tuy nhiên giáo sư của tôi nói rằng anh ta nhận được một lỗi vì tôi không có một vài biến trong lớp của tôi tuyên bố cuối cùng. Eclipse dường như không có vấn đề với điều này trên máy tính của tôi vì vậy tôi không biết làm thế nào để sửa chữa những gì tôi không thể nhìn thấy là sai.Tại sao chương trình sẽ biên dịch cho tôi chứ không phải cho một người khác?

Tôi hiểu rằng một số biến cần phải là cuối cùng để làm việc trong các lớp lồng nhau, nhưng những cái tôi đã tạo dường như chỉ hoạt động tốt, cuối cùng hay không.

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

Bạn đang sử dụng Java 7> và giáo sư của bạn đang sử dụng Java 6 < – MadProgrammer

+2

@MadProgrammer: Nó giống như họ đang sử dụng Java 8 và giáo sư của họ đang sử dụng Java 7 trở xuống. – Makoto

+1

@Makoto Có lẽ, tôi đã bỏ qua Java 7: P – MadProgrammer

Trả lời

21

lớp Nội, chẳng hạn như ActionListener của bạn, không thể truy cập không final biến từ phạm vi chứa nó. Trong các phiên bản Java dưới 8, trình biên dịch sẽ tự động ném một lỗi nếu nó gặp phải tình huống này.

Trong Java 8, trình biên dịch sẽ chỉ thực hiện các biến final nếu chúng không thay đổi ở bất kỳ đâu trong tệp, vì bạn không có ở đây.

Để biết thêm thông tin, hãy xem this post.

Có thể, giáo sư của bạn đang sử dụng Java 7 trở lên, vì vậy mã của bạn không được biên dịch. Chỉ cần thực hiện bất kỳ biến cục bộ nào bạn sử dụng trong lớp bên trong của bạn final.

Các vấn đề liên quan