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