Java的菜单栏操作的类(Java Menubar Action to a Class)

2019-10-19 15:58发布

我有我的计划,只是有1选项有2子选项,例如,文件中的Java菜单栏 - >保存,关闭。 但是,而不是保存并关闭,我的选择是服务器和客户端。 所以对于第一选项我有这个java的动作侦听器的操作事件:

public class serverAction extends AbstractAction
    {
        public serverAction()
        {
            super();
        }
        public void actionPerformed(ActionEvent e)
        {
            JOptionPane.showMessageDialog(null, "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类?

Answer 1:

您的嵌套类是private这意味着,仅在可见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线程之间处理通知。

了解更多: 工作线程和SwingWorker的

注:将是巨大的,如果你实现Runnable ,而延长线,您不添加任何特殊功能,线程没有理由,更多的细节在这里- > “实现Runnable”与“继承Thread” 。



文章来源: Java Menubar Action to a Class