Java 将对象来回发送到线程

Java 将对象来回发送到线程,java,client-server,serversocket,Java,Client Server,Serversocket,我正在尝试用Java制作一个简单的服务器-客户机线程应用程序,关于一个类似测验的游戏。 我有一个Main类作为它的“大脑”,它将处理提问、检查答案等主要过程。我还有另外两个类,ServerHandler和PlayerServerHandler用于连接Main和Player。到目前为止,问题是我想将Main的属性发送到ServerThread。我试着使用这个,但它不起作用。任何有助于改进我的课程的建议都将受到欢迎 public class Main { publi

我正在尝试用Java制作一个简单的服务器-客户机线程应用程序,关于一个类似测验的游戏。 我有一个
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教程;-)