这个简单的Java游戏循环中有什么错误?

时间:2011-07-20 13:12:32

标签: java loops

我已经试图解决这个问题或者现在找到另一种方式约3天,但我不能让它发挥作用...... 基本我将游戏小程序转换为应用程序,但我无法让游戏循环工作。在NetBeans中,我创建了一个Window,但即使我将其设置为Visible也不会显示。如果您有关于如何制作简单游戏循环的教程,那就太棒了。我很绝望,请帮助我!

这是我的主要课程的代码

package MainClass;

import javax.swing.*;

 public class MainClass implements Runnable{

    Painter panel = new Painter();
    JavaPowderToy Screen = new JavaPowderToy();
    Thread t = new Thread();

    public void run()
    {

    Initialize();

    while(true)
    {
        try
        {
            panel.Paint();
            Thread.sleep(15);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }   
    }

    }

void MainClass()
{
  t.start();  

}

public static void main(String[] args) {
    MainClass Java = new MainClass();



}

private void Initialize()
{
    panel.InitializePainting();
    new Window().setVisible(true);
}

}

这是我的画家类:

    package thejavapowdertoy;

    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.Toolkit;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    import java.awt.image.BufferedImage;
    import javax.swing.JPanel;


    public class Painter extends JPanel implements KeyListener{



    BufferedImage buffer;

   public Painter()
    {
        setIgnoreRepaint(true);
        addKeyListener(this);
        setFocusable(true);
    }

   public void InitializePainting()
   {

   }

   public void Paint()
   {
       Graphics2D b = buffer.createGraphics();
       Graphics2D g = (Graphics2D)this.getGraphics();
       b.setColor(Color.red);
       b.fillRect(50, 50, 50, 50);
       b.dispose();
       g.drawImage(buffer, 0, 0, this);
       Toolkit.getDefaultToolkit().sync();
       g.dispose();
   }

    public void keyTyped(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }


    public void keyPressed(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }


    public void keyReleased(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

}

由于

2 个答案:

答案 0 :(得分:1)

您的MainClass实现Runnable因此我假设您希望它由线程运行。但是,线程t并不知道。

您需要将MainClass实例传递给线程的构造函数:new Thread(this);

此外,您的Painter面板未连接到您创建的窗口,因此无法显示。尝试创建JFrameJWindow并将画家放入其中。

答案 1 :(得分:0)

void MainClass()
{
  t.start();  

}

这不是构造函数,而是方法!这是因为线程未启动。删除void

还要看其他答案。基本上你有两个线程。一个MainClass本身,然后是t内的MainClass