簡體   English   中英

為什么我的圖形代碼不會運行,除非代碼塊中有System.out.println?

[英]Why my graphics code don't run unless there is a System.out.println in the code block?

我有這個方法paint()接收Graphics2D參數。 發生的奇怪事情是,除非存在System.out.println(我在下面的塊中注釋掉),否則畫布不會繪制任何內容。

public class Map{

    public void paint(Graphics2D g){

        //fill background to black
        g.setColor(Color.black);
        g.fillRect(0, 0, TILE_SIZE*WIDTH, TILE_SIZE*HEIGHT);

        //draw the tiles and buildings

        for(int i=0;i<WIDTH;i++){
            for(int j=0;j<HEIGHT;j++){
                if(map[j][i] == CLEAR){
                    //System.out.println("");
                    g.setColor(Color.gray);
                    g.fillRect(i*TILE_SIZE, j*TILE_SIZE, TILE_SIZE, TILE_SIZE);
                    g.setColor(Color.red);
                    g.drawRect(i*TILE_SIZE, j*TILE_SIZE, TILE_SIZE, TILE_SIZE);

                }
            }
        }
    }
}

在這里,我使用BufferStrategy在Canvas上繪制並將其添加到Frame。 這個方法在Map類中,它將從BufferStrategy的getDrawGraphics()方法傳遞一個Graphics2D(我希望很多人都熟悉這些東西來理解我在做什么)。

public class MapTest extends Canvas{

    private Map map;

    public MapTest(){

        Frame frame = new Frame("MAP");
        frame.add(this);
        frame.setVisible(true);

        createBufferStrategy(2);
        strategy = getBufferStrategy();

        //draw the map

        Graphics2D g = (Graphics2D) strategy.getDrawGraphics();
        //g.translate(100, 100);
        map.paint(g);

        g.dispose();
        strategy.show();

    }
}

此代碼來自Canvas類。 正如您所看到的,paint()方法與Canvas類(我將其命名為GameTest)分開。 因此,如果我注釋掉println語句,那么畫布中不會顯示圖形,否則會正確顯示。 任何人都可以幫助我???

您應該使用SwingUtilities切換到Event Dispatch Thread(EDT),見下文。 這幾乎是與AWT和Swing類的所有交互所必需的。

  SwingUtilities.invokeLater(new Runnable(){
      public void run(){
          new MapTest();
      }    
   }

請注意,這使用了一個swing助手庫,對於AWT應該沒用,但更好的是開始使用Swing。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM