Java使用MainWindow函数

时间:2014-03-25 21:24:17

标签: java swing class sockets tcp

所以我有一个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函数?或者有更好的方法来解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您需要使用实例MainWindow m = new MainWindow()创建MainWindow类的实例,然后将该函数调用为m.function(),或者将您的函数声明为静态。

静态意味着您可以在不创建对象实例的情况下调用函数。这就是你得到错误的原因,因为你的函数不是静态的,所以它需要调用对象的实例。

您还需要确保将MainWindow类导入到Server类中。