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;
        }
    }

しかし、これをすべて実行すると、次のメッセージが表示されます。

エラーメッセージ

私が書いたようにこれを行うと、Users-objectのIORのみが表示されます。

IOR :0123405948239481293812312903891208320131293812381023
IOR: 0092930912617819919191818173666288810010199181919919

等々 ...

toString()でそれらの表現を見るために、それをそのようにする方法はDefaultMutableTreeNode?私はこれをしたくない:

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

それは重要ではありません。CORBAの代わりにRMIを使用する場合、model.addElement(users[i]);ユーザーの文字列表現が表示されるので、まさにそれが必要です。ただし、CORBAを使用して、文字列ではなくDefaultMutableTreeNodecorba-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 に答える