我正在尝试用Java创建一个简单的服务器客户端线程应用程序,关于类似测验的游戏。
我有一个Main
类作为它的“大脑”,它将处理主要过程,如询问问题,检查答案等。我还有另外两个类,ServerHandler
和Player
。 ServerHandler
将Main
与Player
联系起来。到目前为止,问题是我想将Main
的属性发送到ServerThread
。我尝试使用this
但它不起作用。我们也欢迎任何有助于改进我的计划的建议。
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
}
}
}
答案 0 :(得分:1)
此将无效,因为您使用的是静态方法(main())。重构为非静态方法。
剥离静态fom main并重命名为m(String [] args)。然后插入这个主要方法:
public static void main(String[] args) {
new Main().m(args)
}
答案 1 :(得分:0)
首先,尽量避免说“它不起作用”。告诉 它不起作用。告诉发生什么。告诉你得到的错误信息。
其次,您似乎没有掌握基本的OO概念,例如对象和静态方法,并且处理非常复杂的东西,例如套接字IO和多线程太早。
现在问题:您正在尝试将this
作为方法参数传递。 this
表示调用当前方法的对象。但是你尝试这样做的方法是静态方法,所以它没有任何封闭对象。主方法的代码可能应该是这样的:
public static void main(String[] args) {
Main main = new Main();
main.execute();
}
execute()
方法包含主要方法当前包含的内容。
阅读http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html以获取有关静态类成员的更多信息。