使用类而不创建新实例

时间:2016-05-02 17:35:24

标签: java

假设我有3个班级。类是Login,HandleMultipleClients和LiveMonitoring类。在登录类中,我将服务器连接到多个客户端并将套接字发送到处理多个类在此类中,我将创建连接到服务器并将这些客户端放入数组的客户端列表。在HandleMultipleClients中,还有一个函数可以在ipaddress的基础上将消息发送给我选择的特定客户端。现在在实时监控类中,我想向特定客户端发送消息,我将handlemultipleclients称为新的Handlemultipleclients()并创建一个对象,这样这个新对象就没有像上面那样的客户端列表。我想知道是否有任何方法,我不需要创建handlemultipleclients类的新对象 我的代码是

public class Login implements Runnable {
     @Override
     public void run() {
         try {
             serverSock = new ServerSocket(2101);
             while (true) {
                 sock = serverSock.accept();
                 LiveMOnitoring l=new LiveMOnitoring(sock);
                 System.out.println(sock);
                 //clients.put(soc.getPort(),soc);
             }
         }
     } 
}

public HandleMultipleClients(Socket sock) {
    soc=sock;
    clients.put(soc.getPort(),soc);
}

public void messagetospecificclients(String ipaddress,String choice) throws IOException, InterruptedException {
    System.out.print(ipaddress+"\n"+choice);
    for (Iterator<Integer> iter = clients.keySet().iterator(); iter.hasNext(); ) {
        System.out.print("ok1");
        int key = iter.next();
        java.net.Socket client = clients.get(key);
        InetAddress zee = client.getInetAddress();
        String s = zee.getHostAddress();
        System.out.print(s);
        if (zee.getHostAddress().equals(ipaddress)) {
            System.out.print("ok2");
            dos =new DataOutputStream(client.getOutputStream());
            dos.writeUTF(choice);
        }
    }
}


public class LiveMOnitoring extends javax.swing.JFrame {
    static Socket csocket;
    DataOutputStream dos;
    Map<Integer, java.net.Socket> clients = new HashMap<Integer, java.net.Socket> ();
    private void ApplicationsActionPerformed(java.awt.event.ActionEvent evt) {                                             
        h.messagetospecificclients();
    }
}

2 个答案:

答案 0 :(得分:2)

在Java中,如果要在不实例化类的情况下使用成员方法,则可以将方法设置为静态。

class A
{
   public static void methodName ()
   {

   }
}

使用A.methodName();

进行调用

答案 1 :(得分:0)

您可以使用static获取的内容。

在此阅读更多信息: Calling method without object