将静态变量值传递给另一个类
问题描述:
在我的Java Application Im中尝试创建用户组并为用户分配权限,具体取决于它们所属的用户组。这是我编程的。当用户登录到系统时,获取用户名并存储在一个静态变量中。当用户打开任何表单时,从静态变量中获取用户名并检查其组和权限。根据权限禁用并启用表单的某些组件。这里我有问题从静态变量stgroupName中检索值。 ItmMgt类的方法checkuserrights()不会获取当前用户的名称。有人能帮助我理解这里的错误吗?我想,应该有很多更好的方法来做到这一点。所以欢迎任何建议。将静态变量值传递给另一个类
public class Login extends javax.swing.JInternalFrame {
public static String USERNAME;
USERNAME = txtUserName.getText(); // get the user name to static variable
}
public class ItemMgt extends javax.swing.JInternalFrame {
public ItemMgt() {
initComponents();
checkuserrights();
genarateID();
}
private void checkuserrights() {
try {
Usergroup usergroup = UserGroupController.getUserRights(Login.USERNAME);// check the user's rights passing user name from static variable.
if (usergroup != null) {
btnDelete.setEnabled(usergroup.isDeleteItem());
btnAdd.setEnabled(usergroup.isAdditem());
btnUpdate.setEnabled(usergroup.isUpdateitem());
}
} catch (ClassNotFoundException ex) {
Logger.getLogger(ItemMgt.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(ItemMgt.class.getName()).log(Level.SEVERE, null, ex);
}
}
public class UserGroupController {
public static Usergroup getUserRights(String username) throws ClassNotFoundException, SQLException {
Connection conn = DBConnection.conn();
String sql = "select * from UserGroup where uGroupName = ?";
Object[] values = {username};
ResultSet res = DBHandller.getData(sql, conn, values);
while (res.next()) {
String grpName = res.getString("uGroupName");
boolean additem = res.getBoolean("addItem");
boolean delitem = res.getBoolean("delteItem");
boolean upitem = res.getBoolean("editItem");
Usergroup ugroup = new Usergroup(grpName, additem, delitem, upitem);
return ugroup;
}
return null;
}
}
答
根据定义,静态变量是gloabl对象。在一个实例中更改该值时,该对象的所有其他实例的值将具有相同的值。这是使用静态的一点。
听起来你的对象设计是错误的,你应该使用一个包含组名的用户信息的对象。你可以在你的代码中传递这个对象。
你的代码不清楚,不能编译。它表明你将* user *名称存储在* Login *类的名为* stgroupName *的静态变量中,然后尝试从名为* stgroupName *的静态变量中取回组名,但位于* UserGroup *类。修正你的命名约定(这个'st'前缀是不必要的,并且让事情变得更不可读),并将事物存储在一个独特的地方。 – 2013-04-30 13:07:52
它是一个maltyvuser应用程序? – MaVRoSCy 2013-04-30 13:10:37
@JB Nizet对不起。它应该是Usergroup usergroup = UserGroupController.getUserRights(Login.stgroupName);更新了代码 – amal 2013-04-30 13:12:31