【问题标题】:Java - Sockets and SwingJava - 套接字和 Swing
【发布时间】:2012-05-13 16:51:28
【问题描述】:

我还在学习挥杆和套筒,所以请耐心等待。学习我正在制作一个聊天客户端/服务器系统。现在,我正在处理客户端。我的课是

  • Main(带main方法)code link
  • Window(设置 Swing 组件)code link
  • ActLis(处理来自 Window 的所有组件动作监听器)code link
  • SocketManager(管理我的套接字)code link

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

【问题讨论】:

  • 只需将SocketManager 对象传递给您的ActLis
  • @HunterMcMillen 是的,但我该怎么做呢?每次尝试我都会得到一个空指针,因为我需要在 ActLis 中创建一个 Main 对象来访问 MainSocketManager 对象。我创建的 Main 对象与设置 SocketManager 对象的对象不同,因此它为空。

标签: java swing sockets client-server


【解决方案1】:

你有几个选择:

1) 在 Main 类中有一个 ActLis 对象,并将 Main 对 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
} 

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

public class ActLis
{
    private SocketManager sm;

    public ActLis(SocketManager sm)
    {
        this.sm = sm;
    }
}

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

【讨论】:

    【解决方案2】:

    添加到 Hunter McMillen's:

    3) 制作 Main 类,单例。 id est 不要让它的实例超过一个(如果我已经理解了你的目的,你不需要这个类的多个实例。)所以只需创建这个类的一个实例并将其引用保留为公共静态最终字段。 (当然不要让它在这个类之外被实例化:

        public class Main
        {
            public static final Main instance = new Main(/*args*/);
    
            private Main(/*args*/)
            {
                //blah blah
            }
        }
    

    这样您就可以毫无问题地在代码中的任何位置访问Main 表单中的Socket 字段。

    【讨论】:

      猜你喜欢
      • 2018-12-06
      • 2018-08-25
      • 1970-01-01
      • 2015-04-09
      • 2014-06-06
      • 1970-01-01
      • 2017-06-18
      • 2013-03-17
      • 1970-01-01
      相关资源
      最近更新 更多