Java Swing, Corba Objects - 如何在 DefaultListModel 中存储 Corba 对
Java Swing, Corba Objects - How to store Corba objects in DefaultListModel?
我有这样的 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();
if(users.length != 0)
{
DefaultListModel model = new DefaultListModel();
for(int i=0; i<users.length; i++)
model.addElement(users[i]);
this.usersList.setModel(model);
}
}
this.usersList 是一个JList
。
当我像我写的那样这样做时,我只看到我的用户对象的 IOR:
IOR :0123405948239481293812312903891208320131293812381023
IOR: 0092930912617819919191818173666288810010199181919919
等等...
如何做到这一点,在 DefaultListModel 中看到他们的 toString(); 表示?我不想这样做:
model.addElement(users[i].toString());
这不是重点。当我使用 RMI 而不是 CORBA 时,model.addElement(users[i]);
这正是我需要的,因为我看到用户字符串表示。但是我需要使用 CORBA 并存储在 DefaultListModel corba-user-objects 中,而不是字符串中。请帮忙。
我猜存根的toString()方法实际上并没有调用远程CORBA对象的toString()方法。尝试使用另一个方法名称(如 getName()
),并使用调用此方法的自定义呈现器。
也就是说,将用户建模为远程 CORBA 对象真的是一个好主意吗?这将导致大量或远程方法调用只是为了显示用户的名称,并且这些方法调用基本上不受您的控制,因为 Swing 组件将进行它们。您不应该改用 DTO 吗?
一种方法是创建一个 UserView 类,您将其实例放入列表模型中:
public class UserView {
private final User corbaUser;
public UserView(User corbaUser) {
this.corbaUser = corbaUser
}
@Override
public String toString() {
String ret = null;
// construct the string as you want here
return ret;
}
}
编辑:
正如 JB Nizet 所指出的,小心你放入 toString() 中的代码,因为每次需要显示列表时都会调用它 - 或者显示最新数据可能正是你想要的。
相关文章:
- 未解析的外部符号 CORBA 服务器
- corba :: orb_init泄漏内存
- 在使用VS2010构建ACE和TAO(CORBA)时发生了许多错误
- 复制CORBA ::任何包含字符串的corba程序SEG故障
- CORBA omniorb C++多个仆人
- Corba IDL:结构成员的默认值
- CORBA IDL to C++ - char vs. unsigned char?
- 带有Corbaloc访问的Mico Corba服务器
- 使用CORBA-org.omg.CORBA.BAD_PARAM:连接客户端(在VirtualBox上)和服务器(在loc
- 如何连接客户端(在VirtualBox上)和服务器(在localhost上)?我使用CORBA和C++/Java
- Java Swing, Corba Objects - 如何在 DefaultListModel 中存储 Corba 对
- 如何在 Java 服务器和客户端之间制作 CORBA C++
- 对"CORBA::ValueBase::ValueBase()"的未定义引用,我该如何解决它?(在 omniORB 中使用哪个库)
- 如何将wchar_t(或wchar_t*或CORBA::WChar*)转换为字符串
- 在 CORBA 客户端/服务器应用程序中将无符号的长整型(从 C++)断言为长整型 (Java)
- CORBA客户端/服务器应用程序,从服务器获取信息(空值)
- CORBA C++/Java应用程序中服务器端的分段故障(核心转储)
- CORBA客户端是否有访问服务器IOR文件的方法
- CORBA 序列内存泄漏
- 如何在 CORBA 中获取和设置类字段?(处理 CORBA 对象的序列)