Java 将对象来回发送到线程
我正在尝试用Java制作一个简单的服务器-客户机线程应用程序,关于一个类似测验的游戏。 我有一个Java 将对象来回发送到线程,java,client-server,serversocket,Java,Client Server,Serversocket,我正在尝试用Java制作一个简单的服务器-客户机线程应用程序,关于一个类似测验的游戏。 我有一个Main类作为它的“大脑”,它将处理提问、检查答案等主要过程。我还有另外两个类,ServerHandler和PlayerServerHandler用于连接Main和Player。到目前为止,问题是我想将Main的属性发送到ServerThread。我试着使用这个,但它不起作用。任何有助于改进我的课程的建议都将受到欢迎 public class Main { publi
Main
类作为它的“大脑”,它将处理提问、检查答案等主要过程。我还有另外两个类,ServerHandler
和Player
ServerHandler
用于连接Main
和Player
。到目前为止,问题是我想将Main
的属性发送到ServerThread
。我试着使用这个
,但它不起作用。任何有助于改进我的课程的建议都将受到欢迎
public class Main
{
public static int MYECHOPORT = 8189;
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
// TODO code application logic here
ServerSocket s = null;
int count;
count=0;
Pemain [] player=new Pemain[3];
try
{
s = new ServerSocket(MYECHOPORT);
}
catch(IOException e)
{
System.out.println(e);
System.exit(1);
}
while (true)
{
for(int i=0;i<3;i++)
{
player[i]=new Pemain();
player[i].setNo(i+1);
count++;
}
try
{
for(int i=0;i<3;i++)
{
player[i].setS(s.accept());
}
}
catch(IOException e)
{
System.out.println(e);
continue;
}
if(count==3)
{
for(int i=0;i<3;i++)
{
new ServerHandler(player[i].getS(), this).start();
}
}
// ignore
}
}
}
公共类主
{
公共静态int MYECHOPORT=8189;
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args)
{
//此处的TODO代码应用程序逻辑
servers=null;
整数计数;
计数=0;
佩曼[]玩家=新佩曼[3];
尝试
{
s=新服务器套接字(MYECHOPORT);
}
捕获(IOE异常)
{
系统输出打印ln(e);
系统出口(1);
}
while(true)
{
对于(int i=0;i这将不起作用,因为您使用的是静态方法(main())。请重构为非静态方法
剥离静态fom main并重命名为m(字符串[]args)。然后插入此main方法:
public static void main(String[] args) {
new Main().m(args)
}
首先,尽量避免说“它不工作”。告诉它怎么不工作。告诉发生了什么。告诉你收到的错误信息
其次,您似乎还没有掌握基本的OO概念,比如对象和静态方法,而处理非常复杂的东西,比如套接字IO和多线程还为时过早
现在来看看你的问题:你正试图把这个
作为一个方法参数来传递。这个
表示调用当前方法的对象。但是你试图这样做的方法是一个静态方法,所以它没有任何封闭对象。主方法的代码应该是这样的:
public static void main(String[] args) {
Main main = new Main();
main.execute();
}
其中execute()
方法包含主方法当前包含的内容
有关静态类成员的详细信息,请阅读。它作为非静态变量出现错误…我假设main可以在execute之后发送到任何位置?例如,在main被发送到另一个方法之前将其声明为私有数据成员并调用execute?是的,我不习惯静态变量…我通常只使用私有变量,只尝试非静态变量…A我说过,阅读基本的OO概念。按照我给你的链接阅读整个教程。购买并阅读一本介绍Java的书。从简单的东西开始。多线程非常复杂。我有超过14年的Java经验,但我仍然觉得很难。new Main().m(args)可以在Main?而不仅仅是Main?new Main().m(null)
可以在代码中的任何地方调用。但是如果您没有得到它,您应该阅读更多Java教程;-)