所以我有一个MainWindow.java
创建了包含所有控件和东西的窗口。我在窗口上放了一个菜单栏对象,菜单栏中的一个选项是使程序成为服务器。所以这里的主窗口如下所示:
public class MainWindow extends javax.swing.JFrame {
//all code including menubar click action handler
//Server.start()
}
单击该选项后,它将进入Server.java
类并启动服务器。这是该课程的骨架:
public class Server {
public static void start(String port) {
try {
startServer(Integer.parseInt(port));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void startServer(int PORT) 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() {
...
}
}
}
现在的问题是,一旦它进入Server
类,它就会监听连接并连接正常,但我无法返回MainWindow
类。它保持在Server
级别内。我甚至无法通过MainWindow
来调用MainWindow.function()
函数,因为它说
Cannot make a static reference to the non-static method function() from the type MainWindow
我甚至尝试将所有Server
类代码放入MainWindow类或其上方,但Java并不喜欢它,并说它想要它在一个单独的文件中。
我究竟如何从Server类中引用MainWindow
函数?或者有更好的方法来解决这个问题吗?
答案 0 :(得分:1)
您需要使用实例MainWindow m = new MainWindow()
创建MainWindow类的实例,然后将该函数调用为m.function()
,或者将您的函数声明为静态。
静态意味着您可以在不创建对象实例的情况下调用函数。这就是你得到错误的原因,因为你的函数不是静态的,所以它需要调用对象的实例。
您还需要确保将MainWindow类导入到Server类中。