java - 将静态变量值传递给另一个类

标签 java swing static

在我的Java应用程序中,我尝试创建用户组并根据用户所属的用户组为用户分配权限。我就是这样编程的。当用户登录系统时,获取用户名并将其存储在静态变量中。当用户打开任何表单时,从静态变量中获取用户名并检查其组和权限。根据权限禁用和启用表单的某些组件。我在这里从静态变量 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;
        }
  }

最佳答案

根据定义,静态变量是全局对象。当您更改一个实例中的值时,该对象的所有其他实例的值将具有相同的值。这就是使用静态的要点。

在我看来,您的对象设计是错误的,您应该使用包含用户信息(其中包括组名)的对象。您可以在代码中传递该对象。

关于java - 将静态变量值传递给另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16300588/

相关文章:

java - ModelMapper 与 Jooq Record 集成

java - 为什么 AbstractApplicationContext 会为 LogFactory 抛出 NoClassDefFoundError?

java - 在二维阵列网格上绘制圆圈(JAVA)

java - 为什么我的射弹(图像对象)不移动? Java Swing

java - 带有 mongodb bson 库的 Mongodb 驱动程序在单独的项目中使用时会导致 completableFuture 挂起

java - 什么是类加载器反转

java - Java项目和Flash项目之间的通信

static - 如何使用 PowerMock 模拟返回 void 的静态方法?

c++ - 为什么构造函数没有被调用

java - 从静态方法崩溃调用非静态方法