【问题标题】:java gui and logicjava gui和逻辑
【发布时间】:2011-02-20 09:53:01
【问题描述】:

我想理解一件事需要 3 个小时,但没有成功...

问题是:

我有一个类 Gui(一个客户端),主要用于纸牌游戏。 Gui 有一个 main,它在一个调用程序中有一个 Runnable,其中运行逻辑(一个管理游戏会话的单独类)和一些操作卡片顺序的方法。

public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                PokerClientGui gui = new PokerClientGui();
                gui.setVisible(true);
                PokerClient pokerClient = new PokerClient(gui);

                pokerClient.gameSession();
            }
        });
}

逻辑是在 Gui 的 main 中创建的,将 Gui 本身传递给逻辑。 就我在程序中的处理而言,没有任何问题,因为从服务器发送到客户端逻辑的所有对象/字符串都已被接收,例如 Hand 被传递给 gui 并正确显示。 现在问题来了:我想从 gui 传递到逻辑,被操纵的手通过逻辑类的方法将其发送到服务器。
由于这个函数是由 Gui 上的事件鼠标调用的(而不是在 Gui 的 main 中),我没有逻辑对象的句柄,所以我不能使用它的发送对象方法。 我尝试将发送的逻辑方法更改为静态,并且我也将静态成员设为在套接字上发送内容所涉及的成员.....

它没有发送任何东西......这不是什么问题的问题,我试图捕捉异常(并且没有任何东西来自它们)

我哪里错了?我错过了什么?我应该如何绑定gui和逻辑?

【问题讨论】:

    标签: java user-interface logic


    【解决方案1】:

    也许您可以在 Runnable() 类中创建一个事件队列,并将其传递给您的 gui 和客户端构造函数。

    客户端会添加事件让 GUI 显示,而 GUI 会添加事件让客户端处理。使用两个队列,每个方向一个,而不是为两个方向重复使用一个通道可能更容易。

    然后,您的 GUI 和您的客户端会将此对象的事件队列添加到要在其事件循环中等待时“检查”的事物列表中。当一个事件来自另一个对象时,它会唤醒当前对象进行处理,就像来自服务器或用户的事件一样。

    【讨论】:

    • 我想我可以使用一个事件队列,因为我可以毫无问题地从逻辑与 gui 进行通信......但我迷失了(初学者)如何做到这一点...... . 我一般理解这个概念,通过这个我可以唤醒逻辑中的循环....但是你的意思是用 java.awt.EventQueue.invokeLater(new Runnable() ??? ... ..(我正在网上寻找更多信息,但直到现在还没有成功)
    • @user595983,我想的更简单:java.util.Queue
    • 哦 -__- 我总是把事情弄得太复杂......所以只是一个队列形式的对象,客户端的 gui 和逻辑部分可以在上面读写......谢谢!!
    【解决方案2】:

    代替在主类中创建 PokerClientGui 的对象,你最好直接在 PokerClient 对象中创建它的对象并访问它的对象 gameSession()。

    【讨论】:

    • hmmm 但这并没有改变问题......我仍然需要从 gui 到逻辑进行通信,并且 Gui 看不到逻辑对象。就像我一样,将 gui 传递给逻辑
    • 你也是对的......然后我可以创建将逻辑传递给它的gui(所以我可以直接在gui中调用逻辑的方法)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    相关资源
    最近更新 更多