java getGraphics()返回null,如何访问paintComponent?

时间:2014-03-06 18:06:57

标签: java swing loops graphics paintcomponent

我有一个带有JPanel和paintComponent()的类。我还有一个实现Runnable的类,我计划在线程启动后将图像绘制到paintComponent上。我的构造函数接受了JPanel,从那里我调用了getGraphics()。但是通过测试,搜索这似乎总是返回null。

    System.err.println("Thread Started");
    isRunning = true;
    System.err.println(pap.getGraphics());
    Graphics g = pap.getGraphics();   //pap is the name of the JPanel
    while (isRunning)
    {
        while(xPos <= pap.getWidth() + 1)
        {
            xPos+=horizontalDirection;
            System.err.println(xPos);
            drawImage(upImgs[1], xPos, yPos, g);
            pap.repaint();
            pause();
            //g.drawOval(xPos, 10, 10, 10);
            if(xPos >= pap.getWidth())
                horizontalDirection = -horizontalDirection;
            if(xPos < 1)
                horizontalDirection = 1;
        }        
        //pap.repaint();
        //pause(); // let this thread sleep a bit
    }
    System.err.println("Thread Ended");

返回         线程已启动         2         空值         线程“Thread-1”中的异常java.lang.nullPointerException

如何正确地让paintComponent从这个单独的类中绘制它?

1 个答案:

答案 0 :(得分:2)

你做不到。 Awt / Swing不是线程安全的,因此只能从gui线程进行绘制。