2013-04-30 139 views
0

在我的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; 
     } 
    } 
+1

你的代碼不清楚,不能編譯。它表明你將* user *名稱存儲在* Login *類的名爲* stgroupName *的靜態變量中,然後嘗試從名爲* stgroupName *的靜態變量中取回組名,但位於* UserGroup *類。修正你的命名約定(這個'st'前綴是不必要的,並且讓事情變得更不可讀),並將事物存儲在一個獨特的地方。 – 2013-04-30 13:07:52

+0

它是一個maltyvuser應用程序? – MaVRoSCy 2013-04-30 13:10:37

+0

@JB Nizet對不起。它應該是Usergroup usergroup = UserGroupController.getUserRights(Login.stgroupName);更新了代碼 – amal 2013-04-30 13:12:31

回答

3

根據定義,靜態變量是gloabl對象。在一個實例中更改該值時,該對象的所有其他實例的值將具有相同的值。這是使用靜態的一點。

聽起來你的對象設計是錯誤的,你應該使用一個包含組名的用戶信息的對象。你可以在你的代碼中傳遞這個對象。

相關問題