发送对象来回线程

时间:2012-06-12 10:39:10

标签: java client-server serversocket

我正在尝试用Java创建一个简单的服务器客户端线程应用程序,关于类似测验的游戏。 我有一个Main类作为它的“大脑”,它将处理主要过程,如询问问题,检查答案等。我还有另外两个类,ServerHandlerPlayerServerHandlerMainPlayer联系起来。到目前为止,问题是我想将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
            }
        }  

    }

2 个答案:

答案 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以获取有关静态类成员的更多信息。