在多个类之间共享对象

时间:2013-04-24 15:34:47

标签: java class object

我正在实施一个二十一点游戏,我正在尝试允许多个类 - (分别是ChatGUI和GameGUI)使用我的“客户端”类,它实际上是服务器的入口。

我尝试使用Client类作为每个构造函数的参数创建这些类,但看起来好像我的Client类不能将信息发送回其他类 - ChatGUI / GameGUI。

我已经有了一个可以处理多个客户端连接的工作服务器! (尝试和测试)。

public class BlackJack{
    private Client client;
    private ChatGUI chatgui;
    private GameGUI gamegui;

    public BlackJack(){
        // Setup Client class, which will be passed to all other classes
        client = new Client(server, port, username, chatgui, gamegui);

        // Setup other classes, which will be given Client class
        chatgui = new ChatGUI(client);
        gamegui = new GameGUI(client); 

    }   
}

public class Client{
    private ChatGUI chatgui;
    private GameGUI gamegui;

    Client(String server, int port, String username, ChatGUI cg, GameGUI gamegui){
        // catch these arguments and assign them to variables     
    }

    void display(String msg){
        // Method to display incoming messages to the chat screen
        // Using ChatGUI method (*** not working? ***)
        chatgui.append(msg + "\n");
    }
}

public class ChatGUI{
    private JTextArea textarea;
    private Client client;

    public ChatGUI(Client c){
        client = c;
    }

    // ChatGUI can use client methods
    void sendMessage(String msg){
        client.sendChat(msg);
     }

    void append(String msg){
        textarea.append(msg);
}

public class GameGUI{
    private Client client;

    public GameGUI(Client c){
        client = c;
    }

    // GameGUI can use client methods
    void playGame(){
        client.playGame();
    }
}

请注意,此代码是为更多伪代码引用而编写的 - 不想粘贴数百行。

任何帮助将不胜感激!非常感谢您阅读。

3 个答案:

答案 0 :(得分:2)

您正在将chatGUI的引用传递给您的客户端类,然后在实际实例化chatGUI之后。所以之前传递的引用是不正确的。您需要首先实例化chatGUI和gameGUI对象。然后创建客户端对象并正确设置引用。不要尝试在构造函数中传递引用,因为那时它们无效。

答案 1 :(得分:2)

假设我正确地理解了你的问题,我认为以不同的方式构建你的课程会对你有所帮助......

每个BlackJack对象都有一个客户端,例如

public class BlackJack{
    private Client client;

    public BlackJack(){
        // Setup Client class, which will be passed to all other classes
        client = new Client(server, port, username);

    }  

然后每个Client对象都有一个GUI类的实例,例如

public class Client{
    private ChatGUI chatgui;
    private GameGUI gamegui;

    Client(String server, int port, String username){
             chatgui = new ChatGUI(this);
             gamegui = new GameGUI(this);
    }

    //handle messages from server
    void onMessageRecieved(String msg){
            if(/* the message pertains to the game gui */ )
                    gamegui.newMessage(msg);
            else if( /* the message pertains to the chat gui */ )
                    chatgui.newMessage(msg);
    }

    //here you can add functions for the gui classes to call
    public void sendChat(String chat){

    }
}
那么你的gui课程看起来像......

public class ChatGUI{
    private JTextArea textarea;
    private Client client;

    public ChatGUI(Client c){
        client = c;
    }

    //receive message/command from server
    public void newMessage(String msg){
        //perform the desired action based on the command
    }

    public void sendChat(String msg){
        client.sendChat(msg);
    }
}

public class GameGUI{
    private Client client;

    public GameGUI(Client c){
        client = c;
    }

    //receive message/command from server
    public void newMessage(String msg){
        //perform the desired action based on the command
    }
}

答案 2 :(得分:0)

哼,我想知道我是否理解正确,但是你想要的是:Client1向Client2发送聊天消息吗?

换句话说:chat1 - > Client1 - > client2 - > gui2

如果这是正确的,那么消息如何传输到client2?