2010-11-29 4 views
1

캔버스에서 이중 버퍼링을 사용하려고하는데, 전에 한 번도 해보지 않았습니다. 온라인 튜토리얼을 활용하고 캔버스를 인스턴스화하고 버퍼링을 설정하는 다음 코드를 설정했습니다. 렌더링 그래픽 (여기서는 표시되지 않음)을 포함하여 전체 프로세스를 코딩했으며 컴파일러는이를 수용합니다.Java 버퍼 전략 : 컴파일러가 그것을 좋아하지 않습니다.

volCanvas = new VolCanvas(); 
volCanvas.setBackground(Color.black); 
volCanvas.setBounds(10, 380, 1180, 125); 
add(volCanvas); 
volCanvas.createBufferStrategy(2);   (Program blows up here) 
offScreen = volCanvas.getBufferStrategy(); 
ofsg = (Graphics2D) offScreen.getDrawGraphics(); 

그러나 프로그램은 아래 코드의 플래그가있는 줄에서 폭발합니다. 런타임에서 "구성 요소에 유효한 피어가 있어야 함"이라는 설명과 함께 잘못된 상태 예외가 발생합니다.

내가 알 수있는 한, 소스 코드는 본질적으로 몇 가지 예제에서 본 것처럼 여기에 어떤 일이 일어나는지 실마리가 없습니다. 어떤 도움이라도 대단히 감사하겠습니다.

감사합니다,

존 Doner

+0

왜 질문 요약에 'compiler'를 작성 했습니까? –

답변

1

구성 요소 "유효한 피어 있어야합니다.

그것은 기본적으로 당신의 GUI가 표시되지 않습니다 또는 당신이 당신의 구성 요소를 추가하지 않은 의미 표시되는 GUI

포럼에서 Swing 응용 프로그램과 관련된 다른 질문 Swing 응용 프로그램에서 AWT 구성 요소 (캔버스)를 사용하지 마십시오. ation. JComponent 또는 JPanel로 커스텀 페인팅을 실시한다. 스윙은 기본적으로 이중 버퍼링됩니다.

+0

패널 생성자에서 마지막 3 줄의 코드를 이동하여 작동합니다. 덧붙여, AWT 구성 요소를 Swing과 함께 사용하면 무엇이 잘못됩니까? 나는 내가 해낸 다른 프로그램에 어떤 문제도 가지지 않았다. –

+0

JDK의 최신 릴리스 (또는 2)에서만 작동합니다 (http://java.sun.com/developer/technicalArticles/GUI/mixing_components/). 또한 사용자 정의 페인팅은 AWT보다 Swing에서 다르게 수행되므로 스윙을위한 적절한 방법을 배우고 두 가지를 혼합하지 마십시오. Tere는 Canvas를 사용할 필요가 없습니다. – camickr

관련 문제