1

我知道前段时间我问了几乎相同的问题,但是我有一个非常相似的新问题-但是你们当时给我的解决方案现在不起作用:(

我有一个 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

等等 ...

如何做到这一点,看到他们的toString()代表DefaultMutableTreeNode?我不想这样做:

model.addElement(users[i].toString());

那不是重点。当我使用 RMI 而不是 CORBA 时,model.addElement(users[i]);这正是我所需要的,因为我看到了用户字符串表示。但我需要使用 CORBA 并存储在 DefaultMutableTreeNode corba-user-objects 中,而不是字符串。请帮忙。

4

1 回答 1

1

解决了它:

            if (users != null) {
                for (User f : users) {
                    UserView fv = new UserView(f);
                    DefaultMutableTreeNode node = new DefaultMutableTreeNode(fv);
                    root.add(node);
                }
            }
于 2013-01-20T18:58:01.147 回答