【发布时间】:2013-01-20 16:50:55
【问题描述】:
我知道前段时间我问过almost the same question,但是我遇到了一个非常相似的新问题-但是你们当时给我的解决方案现在不起作用:(
我有一个 IDL 接口:
interface User {
string toString();
//..
};
interface Group {
typedef sequence<User> Users;
Users getUsers();
};
当我将它翻译成 C++ 时,我得到了这样的结果:
// ...
Group::Users* GroupImpl::getUsers()
{
// ..return sequence of 'User'-objects
}
在客户端(用 Java 编写)我想向我的用户展示。我做这样的事情:
public void showAllUsers() {
User[] users = interface_obj.getUsers();
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Main Node");
for(int i=0; i<users.length;i++) {
User u = users[i];
DefaultMutableTreeNode node = new DefaultMutableTreeNode(
((UserView)u).getUser());
root.add(node);
}
treeForumReview.setModel(new DefaultTreeModel(root));
}
当然,我有课:
public class UserView {
private final User f;
private UserView(User f) {
this.f = f;
}
public Forum getUser() {
return this.f;
}
@Override
public String toString() {
String ret = null;
ret = this.f.getName();
return ret;
}
}
但是在运行所有这些时,我会收到一条消息:
当我像写的那样执行此操作时,我只看到我的用户对象的 IOR:
IOR :0123405948239481293812312903891208320131293812381023
IOR: 0092930912617819919191818173666288810010199181919919
等等……
如何做到这一点,在DefaultMutableTreeNode 中看到他们的toString() 表示?我不想这样做:
model.addElement(users[i].toString());
这不是重点。当我使用 RMI 而不是 CORBA 时,model.addElement(users[i]); 正是我所需要的,因为我看到了用户字符串表示。但我需要使用 CORBA 并存储在 DefaultMutableTreeNode corba-user-objects 中,而不是字符串。请帮忙。
【问题讨论】: