gpt4 book ai didi

类的 Java 菜单栏操作

转载 作者:行者123 更新时间:2023-11-29 05:26:08 24 4
gpt4 key购买 nike

我的程序中有一个 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/

24 4 0