내 프로그램에 DoubleBuffer를 구현하는 데 문제가 있습니다. 텍스트 벽에서 희미 해지기 전에 많은 정보가 필요하다는 것을 알아야합니다. 내가 문제가 있다고 생각하는 실제 장소는 한 가지 방법입니다.DoubleBuffering in Java
최근 이중 버퍼링에 대한 gpwiki에 대한 자습서를 살펴본 후 doublebuffer를 구현하려고 시도하는 코드에 코드를 구현하려고 결정했습니다. 다음 오류가 발생합니다. "java.lang.IllegalStateException : 구성 요소에 유효한 피어가 있어야합니다."
당신이 알고 있다면 차이가 있는지 모르겠지만, 다음은 main 메소드가있는 코드입니다. 이것은 내부에 ChronosDisplay 클래스를 표시하는 프레임입니다. 나는 여기에
public class CDM extends JFrame
{
public CDM(String str)
{
super("CD:M - "+str);
try
{
...
ChronosDisplay theGame = new ChronosDisplay(str);
((Component)theGame).setFocusable(true);
add(theGame);
}
catch(Exception e)
{
System.out.println("CDM ERROR: " +e);
}
}
public static void main(String args[])
{
CDM run = new CDM("DP_Mini");
}
}
내가 문제가 (나는 문제가 paint() 메소드에 생각)있는 생각 코드입니다 "..."와 관련이없는 코드를 생략.
public class ChronosDisplay extends Canvas implements Runnable
{
String mapName;
public ChronosDisplay (String str)
{
mapName = str;
new Thread(this).start();
setVisible(true);
createBufferStrategy(2);
}
public void paint(Graphics window)
{
BufferStrategy b = getBufferStrategy();
Graphics g = null;
window.setColor(Color.white);
try
{
g = b.getDrawGraphics();
paintMap(g);
paintUnits(g);
paintBullets(g);
}
finally
{ g.dispose(); }
b.show();
Toolkit.getDefaultToolkit().sync();
}
public void paintMap(Graphics window)
{
TowerMap m = new TowerMap();
try
{
m = new TowerMap(mapName);
for(int x=0; x<m.getRows()*50; x+=50)
{
for(int y = 0; y<m.getCols()*50; y+=50)
{
int tileType = m.getLocation(x/50,y/50);
Image img;
if(tileType == 0)
{
Tile0 t = new Tile0(x,y);
t.draw(window);
}
...// More similar if statements for other integers
}
catch(Exception e) ...
}
...// Additional methods not shown here
public void run()
{
try
{
while(true)
{
Thread.currentThread().sleep(20);
repaint();
}
}
catch(Exception e) ...
}
}
당신이 (내가 중요한 의심) 궁금하다면이 클래스는 CDM 클래스에 표시되면, Tile0 클래스에서 무승부() 메소드는 다음과 같습니다
public void draw(Graphics window)
{
window.drawImage(img,getX(),getY(),50,50,null);
}
모든 포인터, 조언, 또는 해결책은 중대하게 평가된다. 시간 내 줘서 고마워! : D
일반적인 방향으로 나를 가르쳐 주셔서 감사합니다, camikr. 하지만, EDT가 무엇인지 말해 주시겠습니까? Google에서 간단한 검색을 수행해도 관련된 결과가 나오지 않습니다. – exodrifter
EDT는 이벤트 발송 스레드입니다. 자세한 내용은 "동시성"에 대한 스윙 튜토리얼의 섹션을 읽어보십시오. http://java.sun.com/docs/books/tutorial/uiswing/TOC.html – camickr
다시 한번 감사드립니다. : D – exodrifter