0

私の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;
        }
  }
4

1 に答える 1

3

静的変数は、定義上、gloabl オブジェクトです。1 つのインスタンスの値を変更すると、そのオブジェクトの他のすべてのインスタンスの値は同じ値になります。これがスタティックを使用するポイントです。

オブジェクトの設計が間違っているように思えます。グループ名を含むユーザーに関する情報を持つオブジェクトを使用する必要があります。このオブジェクトは、コード内で渡すことができます。

于 2013-04-30T13:06:19.690 に答える