Java 类型不匹配错误:无法从播放机转换为线程

Java 类型不匹配错误:无法从播放机转换为线程,java,multithreading,Java,Multithreading,我如何制作一个对象的多个线程 我有一个带有构造函数播放器(String,int,int)的类。 现在,在我的main中,我想创建多个Player对象用作线程 我试着把这些物体做成一个数组 Thread[] player= new Thread[numberOfPlayers]; for (int i = 0; i < numberOfPlayers; i++) { player[i] = new Player("Default", 0, (i + 1));

我如何制作一个对象的多个线程

我有一个带有构造函数
播放器(String,int,int)
的类。 现在,在我的main中,我想创建多个
Player
对象用作线程

我试着把这些物体做成一个数组

Thread[] player= new Thread[numberOfPlayers];
    for (int i = 0; i < numberOfPlayers; i++)
    {
       player[i] = new Player("Default", 0, (i + 1));
    }
Thread[]player=新线程[numberOfPlayers];
for(int i=0;i
但是得到一个“类型不匹配错误:无法从播放器转换到线程”


我基本上希望在循环中创建这些线程,因为每次程序运行时,都会有随机数目的玩家。线程需要访问与每个字符(String,int,int)的值对应的信息列表,并一次更新一个。有什么建议吗?

除非
字符
线程
的子类,否则不能将
字符
对象放入
线程[]
。这对所有对象都是正确的——您不能将一种类型的对象(例如,
B
)视为另一种类型的对象(例如,
B
),除非

vs


就个人而言,听起来你实际上并不需要线程。你知道吗?为什么不直接用你的对象做一个数组呢?还有一些其他事情:我要重命名
字符
,因为这已经是标准库中的一个类了。如果试图命名某个
char
,也会出现编译错误,因为该标识符是为
char
原语类型保留的

Player[] players = new Player[numberOfPlayers];

除非
Character
Thread
的子类,否则不能将
Character
对象放入
Thread[]
中。这对所有对象都是正确的——您不能将一种类型的对象(例如,
B
)视为另一种类型的对象(例如,
B
),除非

vs


就个人而言,听起来你实际上并不需要线程。你知道吗?为什么不直接用你的对象做一个数组呢?还有一些其他事情:我要重命名
字符
,因为这已经是标准库中的一个类了。如果试图命名某个
char
,也会出现编译错误,因为该标识符是为
char
原语类型保留的

Player[] players = new Player[numberOfPlayers];

不能将
char
用作标识符,因为它是保留字。只需将数组名称更改为
chars
our something

此外,您的角色类必须扩展线程才能将其放入线程数组中


另请参见您不能将
char
用作标识符,因为它是保留字。只需将数组名称更改为
chars
our something

此外,您的角色类必须扩展线程才能将其放入线程数组中


另请参见

I思考您试图做的事情如下所示:

创建一组
Player
类实例。Player类将有一个启动循环的
activate
方法。这个循环会导致玩家移动并做其他事情,然后睡觉,然后不断重复。比如:

Player[] parray = new Player[nop];
for (int i = 0; i < nop; i++)  parray[i] = new Player( ... );
for (Player p : parray)  p.activate();
注意:此代码完全不完整。我只是想暗示一下怎么做

除非你已经准备好进行很多非常艰难的编程,否则你最好跳过“激活”方法,将run方法直接放在Player中,并让你的玩家像这样循环移动:

while (true)  {
for (Player p : parry)  p.run();
// Do non-player stuff here.
} 

现在你只有一条线索了。很少有人会出错,当它出错时,你就能找到它。(我仍然只是给出一些提示。将无限循环与UI集成将是一项不小的工作。)

I我认为您试图做的是这样的:

创建一组
Player
类实例。Player类将有一个启动循环的
activate
方法。这个循环会导致玩家移动并做其他事情,然后睡觉,然后不断重复。比如:

Player[] parray = new Player[nop];
for (int i = 0; i < nop; i++)  parray[i] = new Player( ... );
for (Player p : parray)  p.activate();
注意:此代码完全不完整。我只是想暗示一下怎么做

除非你已经准备好进行很多非常艰难的编程,否则你最好跳过“激活”方法,将run方法直接放在Player中,并让你的玩家像这样循环移动:

while (true)  {
for (Player p : parry)  p.run();
// Do non-player stuff here.
} 

现在你只有一条线索了。很少有人会出错,当它出错时,你就能找到它。(我仍然只是给出一些提示。将无限循环与UI集成将是一项不小的工作。)

我建议您不要使用字符作为类的名称,因为它已经是java.lang.package中一个类的名称,因此在您的代码中随处导入。将其更改为
player[I]=new Thread(new player(“Default”),0,(i+1));
我建议您不要使用字符作为类的名称,因为它已经是java.lang.package中一个类的名称,因此会在代码中的任何地方导入。将其更改为
player[i]=new Thread(new player(“默认”,0,(i+1)))
@jsan,没关系;在这种情况下,忽略答案的最后一部分。如果要将类放入
线程[],您的类仍然必须从
线程继承
@jsan分配是否明确规定玩家必须是线程,或者他们必须在多个线程中执行?如果他们必须在多个线程中执行,我建议你让他们实现可运行,用新线程(玩家)构造线程,然后只使用线程。开始。@Luis来自分配:“我们的每个玩家都由一个线程表示。每个线程独立于其他线程运行。(即,它将独立调度)。也就是说,线程必须以某种方式共享数据。”@jsan,这很好;在这种情况下,忽略答案的最后一部分。你的类仍然有