Java 在运行时更改JLabel的文本和JMenuItem的状态

Java 在运行时更改JLabel的文本和JMenuItem的状态,java,swing,dynamic,jlabel,jmenuitem,Java,Swing,Dynamic,Jlabel,Jmenuitem,我正在开发一个应用程序,我想在用户登录系统后在屏幕顶部显示用户名。另外,我需要在用户登录后才启用五个JMenuItems。我使用了下面的代码,并从成功登录If条件调用了它,但它对应用程序没有任何更改 注意:-用户名将显示在JFrame中,登录表单为JInternalFrame 所有JMenuItems也都在JFrame中 obj2是为LoginModel类创建的对象,用于检索用户名 private String global_username=""; public String getGloba

我正在开发一个应用程序,我想在用户登录系统后在屏幕顶部显示用户名。另外,我需要在用户登录后才启用五个JMenuItems。我使用了下面的代码,并从成功登录If条件调用了它,但它对应用程序没有任何更改

注意:-用户名将显示在JFrame中,登录表单为JInternalFrame 所有JMenuItems也都在JFrame中

obj2是为LoginModel类创建的对象,用于检索用户名

private String global_username="";
public String getGlobalUsername(){
    return global_username;
}
我调用该方法来更改JMenuItems的状态并设置JLabel的值

public void disableMenues(){
        mntmSupplierManagement.setEnabled(false);
        mntmEmployeeManagement.setEnabled(false);
        mntmStockManagement.setEnabled(false);
        mntmReporting.setEnabled(false);
        mntmTransaction.setEnabled(false);
        userName.setText("Logged in as "+obj2.getGlobalUsername());
}
JLabel userName=new JLabel();
userName.setText("Logged in as "+obj2.getGlobalUsername());
我在JInternalFrame(登录表单)中使用了下面的代码,以便在用户登录后调用上述方法

 if(username.equals(user)&&password.equals(pass)){
        System.out.println("Logged into the system");
        global_username=username;
        accountType=acc;
        updateView();
else{
        System.out.println("Unsuccessful login");                            
        updateView();
}
我还使用以下代码创建了JLabel

public void disableMenues(){
        mntmSupplierManagement.setEnabled(false);
        mntmEmployeeManagement.setEnabled(false);
        mntmStockManagement.setEnabled(false);
        mntmReporting.setEnabled(false);
        mntmTransaction.setEnabled(false);
        userName.setText("Logged in as "+obj2.getGlobalUsername());
}
JLabel userName=new JLabel();
userName.setText("Logged in as "+obj2.getGlobalUsername());
这给了我一个NullPointerException,所以我把它改为

userName.setText("Logged in as ");
非常感谢您的帮助


提前谢谢大家

我建议使用一个变量来跟踪用户是否登录,然后适当地绑定组件

private boolean loggedIn = false;

public void disableMenues(){
    mntmSupplierManagement.setEnabled(!loggedIn);
    mntmEmployeeManagement.setEnabled(!loggedIn);
    mntmStockManagement.setEnabled(!loggedIn);
    mntmReporting.setEnabled(!loggedIn);
    mntmTransaction.setEnabled(!loggedIn);
    userName.setText("Logged in as "+obj2.getGlobalUsername());
}
我还建议在整个会话中跟踪LoginModel类

private LoginModel lm = null;

private void authenticate(String username, String password){
    //check username password (database maybe)
    //and return the LoginModel for the pair
    lm = returnedLoginModel;
}
然后在JFrame中,你要做的就是

if(lm != null){
    System.out.println("Logged into the system");
    loggedIn = true;
    updateView();
else{
    System.out.println("Unsuccessful login");
    loggedIn = false;                            
    updateView();
}
请记住,您还必须跟踪注销

private void logout(){
    lm = null;
}

“非常感谢任何帮助”任何都可能被仔细检查。@Andrew我实际上不知道您指的是什么,但无论如何,我给出的代码尽管很长,但有必要解释我的问题是什么您没有包含太多的代码,但您不一定包括构成SSCCE的所有相关部分。例如,obj2的类类型及其类变量声明。我想这也是@Andrew所指的。对于您的NPE来说,
obj2
似乎为空,但我真的无法从您显示的代码中说出原因。@Yoosuf“尽管很长”,SSCE可以轻松地包含100行代码(即比您包含的代码多)。SSCCE将为我们提供确定什么是
obj2
以及为什么为
null
所需的所有信息。(注意,我从@Perception的评论中推断出了最后一部分——我没有试图破译代码片段。)很抱歉,实际上我通过了SSCCE链接,我还编辑了上述问题,包括obj2类以及我需要它的原因。谢谢