0

我正在尝试用 Java 制作一个简单的服务器客户端线程应用程序,关于一个类似测验的游戏。我有一个Main班级作为它的“大脑”,它将处理诸如提问、检查答案等主要过程。我还有另外两个班级,ServerHandlerPlayer. 是ServerHandler连接MainPlayer到目前为止,问题是我想发送 to 的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
            }
        }  

    }
4

2 回答 2

1

不起作用,因为您使用的是静态方法(main())。重构为非静态方法。

去掉 main 中的 static 并重命名为 m(String[] args)。然后插入这个主要方法:

public static void main(String[] args) {
   new Main().m(args)
}
于 2012-06-12T10:57:16.177 回答
0

首先,尽量避免说“它不起作用”。告诉它如何不起作用。告诉你会发生什么。告诉你得到的错误信息。

其次,您似乎没有掌握对象和静态方法等基本的 OO 概念,处理套接字 IO 和多线程等非常复杂的东西还为时过早。

现在解决您的问题:您试图this作为方法参数传递。this表示调用当前方法的对象。但是您尝试执行此操作的方法是静态方法,因此它没有任何封闭对象。main 方法的代码应该是这样的:

public static void main(String[] args) {
    Main main = new Main();
    main.execute();
}

execute()方法包含您的主要方法当前包含的内容。

有关静态类成员的更多信息,请阅读http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

于 2012-06-12T10:58:06.113 回答