Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么不是';这根线不行吗?_Java_Multithreading - Fatal编程技术网

Java 为什么不是';这根线不行吗?

Java 为什么不是';这根线不行吗?,java,multithreading,Java,Multithreading,我是一名初级Java程序员。我正在尝试构建一个可以直接在控制台上玩的太空入侵者游戏。稍后,我想通过JFrame添加一个图形界面;然而,目前,我仅限于创建一个不起作用的JFrame窗口。我将这些类保存在几个文件中—Constants.java、Entity.java、Player.java和Board.java、SpaceInvaders.java—我已经按照指定的顺序编译了这些文件。我的问题是,当我尝试运行main方法时,没有显示任何内容。没有窗户弹出。控制台中不显示任何输出。我怀疑问题出在类板

我是一名初级Java程序员。我正在尝试构建一个可以直接在控制台上玩的太空入侵者游戏。稍后,我想通过JFrame添加一个图形界面;然而,目前,我仅限于创建一个不起作用的JFrame窗口。我将这些类保存在几个文件中—Constants.java、Entity.java、Player.java和Board.java、SpaceInvaders.java—我已经按照指定的顺序编译了这些文件。我的问题是,当我尝试运行main方法时,没有显示任何内容。没有窗户弹出。控制台中不显示任何输出。我怀疑问题出在类板上,可能是在gameInit()方法或run()方法中的线程构造上。我在我的课程教科书中找不到任何关于线程的信息——我从网站上获得了线程代码,我将在我的项目最终版本中引用它

如果你能给我一些建议,一定要告诉我。很抱歉,我对stackoverflow.com的格式不熟悉

我在下面附上了我的代码副本

Constants.java

import java.io.*;

public interface Constants {
    public static final int MOTION_WIDTH = 20;
    public static final int MOTION_LENGTH = 20;
    public static final int DELAY = 17;
}

Entity.java

import java.io.*;

public class Entity {
    private int xPosition;
    private int yPosition;

    public void setXPosition(int newXPosition) {
        this.xPosition = newXPosition;
    }

    public int getXPosition() {
        return xPosition;
    }

    public void setYPosition(int newYPosition) {
        this.yPosition = newYPosition;
    }

    public int getYPosition() {
        return yPosition;
    }
}

Player.java

import java.io.*;

import java.awt.event.KeyEvent;

public class Player extends Entity implements Constants{
    private final int START_X_POSITION = 0;
    private final int START_Y_POSITION = 0;
    int x = 0; 

    public Player() {
        setXPosition(START_X_POSITION);
        setYPosition(START_Y_POSITION);
    }

    public void move() {
        setXPosition((getXPosition()) + x);

        if ((getXPosition()) <= 0) {
            setXPosition(0);
        }
        if ((getXPosition()) >= MOTION_WIDTH) {
            setXPosition(MOTION_WIDTH);
        }
    }
        public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            x = 1;
        } else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            x = -1;
        }
        }

    public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            x = 0;
        } else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            x = 0;
        }
    }
}

在类
SpaceInvaders
中,您提供的构造函数不是真正的构造函数。请删除退货类型
void
。所以应该是这样的

public SpaceInvaders() {
    add(new Board());
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(500, 500);
    setVisible(true);
    requestFocusInWindow();
}

public static void main(String[] args) {
        new SpaceInvaders();
}
以下是Java文档中有关构造函数的信息:

类包含被调用以从类蓝图创建对象的构造函数。构造函数声明与方法声明类似,只是它们使用类的名称,并且没有返回类型。 ()


应用修改后,JFrame会显示出来,控制台上也会打印很多0和a^。

我看不到代码中的线程开始。我认为您必须按照下面的示例开始线程

class Board implements Runnable{  
public void run(){  
System.out.println("thread is running...");  
}  

public static void main(String args[]){  
Board b1=new Board();  
Thread t1 =new Thread(b1);  
t1.start();  
 }  
} 
而且构造不应该具有返回类型

public void SpaceInvaders() {
}
改为

public SpaceInvaders() {
}

public void SpaceInvaders()
不是构造函数。试着从那一行中删除
void
。我的错我没有看到。谢谢你,Stefan Freitag
public void SpaceInvaders() {
}
public SpaceInvaders() {
}