类的 Java 菜单栏操作

标签 java swing sockets static action

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

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

    }

因此,当我单击"file"->“服务器”时,它会工作,它会弹出一个显示“测试”的窗口。现在我有一个服务器类(我已经单独测试过并且知道它可以工作)看起来像这样:

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 类,以便它可以启动服务器代码并等待和监听任何客户端连接。我的问题是,如何从 serverAction 类启动整个 SocketServer 类代码?

最佳答案

你的 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" .

关于类的 Java 菜单栏操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22619323/

相关文章:

linux - Linux 中有异步版本的 sendfile 吗?

java - 用于服务器/客户端通信的自定义 readLine() 方法

java - 如何增加等待 couchbase 查询服务启动的超时时间

java - 添加到面板的禁用复选框未被禁用

java - Parquet 格式的 Mapreduce 错误

java - 如何在调整JColorChooser 的同时不断更新场景颜色?

c# - StreamReader.ReadLine 和 CR

java - TestFX和Gradle-NoNodeFoundException

java - 如何将值从一个 JFrame 传递到另一个 JFrame?

java - 如何在应用 MaskFormatter 后使 JTable 单元格中的插入符显示在左侧