Java菜单操作到类

时间:2014-03-24 19:53:23

标签: java swing sockets static action

我的程序中有一个java菜单栏,只有1个选项,带有2个子选项,例如:档案 - >保存,关闭。但是,不是保存和关闭,我的选项是服务器和客户端。因此,对于第一个选项的action事件,我有这个java动作监听器:

public class serverAction extends AbstractAction
    {
        public serverAction()
        {
            super();
        }
        public void actionPerformed(ActionEvent e)
        {
            JOptionPane.showMessageDialog(null, "Test");
        }

    }

当我点击File-> Server时,它会弹出一个显示Test的窗口。现在我有一个服务器类(我已单独测试并知道它有效),如下所示:

public class SocketServer {

    public static void main(String[] args) throws Exception {
        ...
    }   
    private static class ClientListenThread extends Thread {        
        public ClientListenThread(Socket socket, int ClientNumber){
            ...
        }       
        public void run() {
            ...
        }
    }

    private static class ServerSendThread extends Thread {      
        public ServerSendThread(Socket socket) {
            ...
        }       
        public void run() {
            ...
        }
    }
}

现在,当我单击主程序的服务器选项时,我需要调用此SocketServer类,以便它可以启动服务器代码并等待并侦听任何客户端连接。我的问题是,如何从SocketServer类启动整个serverAction类代码?

1 个答案:

答案 0 :(得分:3)

您的nested-classesprivate,这意味着只能在ServerSocket课程中看到。因此,您可以提供具有更高可见性的帮助方法,或更改类声明签名并提高可见性。

辅助方法示例:

public class SocketServer {
.
.
 //nested classes declaration    
 public static void startServer(){
   //code to start threads new SomeThread().start();
 }    
}

在你的行动中

public class ServerAction extends AbstractAction{
        @Override
        public void actionPerformed(ActionEvent e){
            SocketServer.startServer();
            JOptionPane.showMessageDialog(null, "Test"); 
        }
}

如果您可以在客户端连接时发出通知,那将是很好的,我建议您查看SwingWorker,它提供有用的工具来处理后台线程和gui线程之间的通知

了解详情:Worker threads and SwingWorker

注意:如果你实现Runnable而不是扩展Thread,那么你会发现没有任何理由可以添加任何特殊功能,这里有更多细节 - > "implements Runnable" vs. "extends Thread"