2014-01-29 3 views
0

오류 일식이주는 유일한 것은 : errors exist in this project/s입니다. 코드는 새로운 클래스를 추가 할 때까지 제대로 작동했습니다.Java 코드가 작동하지 않습니다. 이클립스에 오류가 있습니다.

코드 :

import javax.swing.*; 
import java.awt.*; 

public class Helloworld { 
    public static void main(String[]args){ 
     JFrame frame = new JFrame(); 

     class HelloComponent extends JComponent{ 
      public void paintComponent (Graphics g){ 
       g.drawString("Hello, Java", 123, 95); 
       frame.add(new HelloComponent()); 
      } 
     } 
    } 
} 
+0

_ 오류를 읽었습니까? – SLaks

+0

main 메서드에서 새 클래스를 정의 할 수 없습니다. –

+1

@tobias_k [이유] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.1.3)를 물어보십시오 (구체적으로 예 8.1.3 -2. Inner Class Declarations_)? –

답변

4

귀하의 오류는 다음과 같습니다 "다른 방법에 정의 된 내부 클래스 내부가 아닌 최종 변수 프레임
을 참조 할 수 없습니다."
frame을 final로 정의하여 수정할 수 있습니다.

final JFrame frame = new JFrame();

이것은 당신의 컴파일 시간 문제입니다. 그렇다면
코드가 예상 한대로 작동하지 않으면 코드를 더 수정해야 할 수도 있습니다.

+1

'frame.add '가있는 행은 다른 행 (main 메소드에서 직접)에 속해 있다고 생각합니다.'frame'은'final' 일 필요는 없습니다. –

+0

@tobias_k 당신이 절대적으로 옳은 것은,'paint '가 호출 될 때마다'new HelloComponent'를 만들고'frame'에 추가하는 것이 OP가 의도 한 바가 아닐 것입니다. –

관련 문제