Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-Sockets和Swing_Java_Swing_Sockets_Client Server - Fatal编程技术网

Java-Sockets和Swing

Java-Sockets和Swing,java,swing,sockets,client-server,Java,Swing,Sockets,Client Server,我还在学习swing和sockets,所以请耐心点。为了学习,我正在制作一个聊天客户端/服务器系统。现在,我正在为客户工作。我的课是 Main(使用Main方法) 窗口(设置回转组件) ActLis(从窗口处理所有组件动作侦听器) SocketManager(管理我的套接字) 当程序运行时,我在Main中设置了SocketManager对象,但是当ActLis需要使用该套接字发送消息时,我不知道从Main获取消息的好方法。我正在做的事情是否完全无效,是否有更好的方法来设置它,或者是否有方法从

我还在学习swing和sockets,所以请耐心点。为了学习,我正在制作一个聊天客户端/服务器系统。现在,我正在为客户工作。我的课是

  • Main(使用Main方法)
  • 窗口(设置回转组件)
  • ActLis(从窗口处理所有组件动作侦听器)
  • SocketManager(管理我的套接字)

当程序运行时,我在
Main
中设置了
SocketManager
对象,但是当
ActLis
需要使用该套接字发送消息时,我不知道从
Main
获取消息的好方法。我正在做的事情是否完全无效,是否有更好的方法来设置它,或者是否有方法从我不知道的
Main
类获取我的
SocketManager
对象?(我意识到我的代码中还有其他问题,但我只是想让sockets开始工作,我很难使用它们。)

您有几个选择:

1) 在Main类中有一个ActLis对象,并将Main对SocketManager的引用传递给它

2) 让ActLis类在其构造函数中设置对SocketManager对象的引用


这可能是最简单的方法。

您有几个选择:

1) 在Main类中有一个ActLis对象,并将Main对SocketManager的引用传递给它

2) 让ActLis类在其构造函数中设置对SocketManager对象的引用


这些可能是最简单的方法。

亨特·麦克米伦的补充:

3) 做主课,单身汉。id est不允许它有多个实例(如果我已经理解了你的目的,你不需要这个类有多个实例。)所以只需要创建这个类的一个实例,并将它的引用作为公共静态final字段保存在其中。(当然,不要让它从这个类之外实例化:


这样,您就可以毫无问题地访问
Main
表单中的
Socket
字段。

添加到Hunter McMillen的:

3) 做主课,单身汉。id est不允许它有多个实例(如果我已经理解了你的目的,你不需要这个类有多个实例。)所以只需要创建这个类的一个实例,并将它的引用作为公共静态final字段保存在其中。(当然,不要让它从这个类之外实例化:


这样,您就可以毫无问题地访问
Main
表单中的
Socket
字段。

只需将
SocketManager
对象传递给
ActLis
class@HunterMcMillen是的,但是我该怎么做呢?每次我尝试都会得到一个空指针,因为我需要在ActLis中创建一个主对象来访问主的SocketManager对象。但我创建的主对象与SocketManager对象设置的对象不同,因此为空。只需将
SocketManager
对象传递给您的
ActLis
class@HunterMcMillen是的,但是我该怎么做呢?每次我尝试都会得到一个空指针,因为我需要在ctLis访问Main的SocketManager对象。但我创建的主对象与SocketManager对象设置的对象不同,因此为空。
public class Main
{
   public static void main(String[] args)
   {
       ActList        a = new ActList(...);
       SocketManager sm = new SocketManager(...);

       a.sendMessageWithSocket(sm); //here you pass Main's reference to SocketManager 
   }                                //object to the ActLis class for use
} 
public class ActLis
{
    private SocketManager sm;

    public ActLis(SocketManager sm)
    {
        this.sm = sm;
    }
}
    public class Main
    {
        public static final Main instance = new Main(/*args*/);

        private Main(/*args*/)
        {
            //blah blah
        }
    }