我正在实施一个二十一点游戏,我正在尝试允许多个类 - (分别是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();
}
}
请注意,此代码是为更多伪代码引用而编写的 - 不想粘贴数百行。
任何帮助将不胜感激!非常感谢您阅读。
答案 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)
换句话说:chat1 - > Client1 - > client2 - > gui2
如果这是正确的,那么消息如何传输到client2?