首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >"Run“方法无效

"Run“方法无效
EN

Stack Overflow用户
提问于 2014-03-30 21:47:14
回答 2查看 144关注 0票数 0

嘿,伙计们,我对Java游戏编程很陌生,我现在正在使用可运行的界面。由于某些原因,我的run()方法从未被调用,我也不知道为什么。我尝试过在其中放置许多System.out.println语句,但它们从未被打印出来。任何帮助都将不胜感激!

代码语言:javascript
复制
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JPanel;


public class GamePanel extends JPanel implements Runnable
{
private final int WIDTH = 160;
private final int HEIGHT = WIDTH/12 *9;
private final int RATIO = 3;

private Thread animator;
private volatile boolean running;
private volatile boolean gameOver;

private double FPS = 60D;
private double period = 1000/FPS;

private Image dbImage;
private Graphics dbg;

public GamePanel()
{
    setPreferredSize(new Dimension(WIDTH *3, HEIGHT*3));
    setBackground(Color.WHITE);
    setFocusable(true);
    requestFocus();
    terminate();
}

public void addNotify()
{
    super.addNotify();
    startGame();
}

public void startGame()
{
    System.out.println("Thread started");
    animator = new Thread();
    animator.start();
}

public void stopGame()
{
    System.out.println("Thread stopped");
    running = false;
}

public void run() 
{
    long beforeTime, timeDiff, sleepTime;
    beforeTime = System.currentTimeMillis();
    System.out.println(beforeTime);

    running = true;
    while (running)
    {
        System.out.println("Running");
        gameUpdate();
        gameRender();
        paintScreen();

        timeDiff = System.currentTimeMillis() - beforeTime;
        sleepTime = (long) period - timeDiff;

        if(sleepTime <= 0)
            sleepTime = 5;

        try 
        {
            Thread.sleep(sleepTime);
        } 
        catch (InterruptedException e) 
        {
            e.printStackTrace();
        }
        beforeTime = System.currentTimeMillis();
    }
    System.exit(0);
}

public void gameRender() 
{
    if (dbImage == null)
    {
        dbImage = createImage(WIDTH, HEIGHT);
    }
    else
        dbg = dbImage.getGraphics();

    dbg.setColor(Color.WHITE);
    dbg.fillRect(0, 0, WIDTH, HEIGHT);
}

public void paintComponent(Graphics g)
{
    super.paintComponent(g);
    g.drawImage(dbImage, 0, 0, null);
}

public void gameUpdate()
{

}

private void paintScreen()
{
    Graphics g;
    try
    {
        g = this.getGraphics();
        if (g!= null && dbImage!= null)
            g.drawImage(dbImage, 0, 0, null);
        Toolkit.getDefaultToolkit().sync();
        g.dispose();
    }
    catch (Exception e)
    {
        System.out.println("Error: " + e.getMessage());
    }
}

public void terminate()
{
    addKeyListener (new KeyAdapter()
    {
        public void keyPressed(KeyEvent e)
        {
            int keyCode = e.getKeyCode();
            if (keyCode == KeyEvent.VK_ESCAPE)
            {
                stopGame();
            }
        }
    });
}


}


import javax.swing.JFrame;


public class GameFrame extends JFrame
{
private final int WIDTH = 160;
private final int HEIGHT = WIDTH/12*9;
private final int RATIO = 3;

public GameFrame()
{
    setTitle("User Input Game");
    setSize(WIDTH*3,HEIGHT*3);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);
    GamePanel mainPanel = new GamePanel();
    add(mainPanel);
}
}




public class Main 
{

public static void main(String[] args) 
{
    new GameFrame().setVisible(true);
}

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-30 21:49:25

您需要更改startGame()方法:

代码语言:javascript
复制
    animator = new Thread(new GamePanel());

您需要将一个Runnable ( GamePanel是其中之一)传递到线程构造函数中。然后,线程在启动时运行可运行的线程。

票数 1
EN

Stack Overflow用户

发布于 2014-03-30 21:55:26

你似乎在任何地方都没有主要的方法。无论是在该类中还是在外部类中,都需要一个创建GamePanel实例并将其作为参数传递给线程类的main方法。就像这样:

代码语言:javascript
复制
public class Test
{
  public static void main(String[] args)
  {
    Thread t = new Thread(new GamePanel()).start();
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22750300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档