我是Java的新手,所以我可能在做这件事时完全错了。我必须为软件工程课程做这个庞大的项目。该代码长约2,000行,所以这是基本代码
public class BookRental extends JFrame{
public Client currentClient = new Client(); // creating client object
//rest of declared variables.
public class Client{ //Client class containing all get/set methods for each variable
private username;
private void setUsername(String u){
username = u;
}
public String getUsername(){
return username;
}
public class LoginPanel extends JPanel{} //Panel to show and receive login info.
public class RegisterPanel extends JPanel{} //Panel to register.
public class MenuPanel extends JPanel{ //Panel showing main menu.
//At this point currentClient will contain values
public ClientInfoPanel(){
initComponents();
}
private void initComponents(){
infoPanelUserName = new JLabel();
infoPanelFullName.setText("Currently logged in as: " + currentClient.getUsername());
}
private JLabel infoPanelUserName;
}
public class ClientInfoPanel extends JPanel{} //Panel to print currentClient info to screen using JLabel objects
private void ViewClientInfoButtonActionPerformed(event){ // Using button in Menu Panel to setVisibility of clientInfoPanel to (true)
//At this point there will be a value for currentClient
clientInfoPanel = new ClientInfoPanel();
this.add(clientInfoPanel);
menuPanel.setVisible(false);
clientInfoPanel.setVisible(true);
}
public BookRental(){initComponents();} //Constructor
private void initComponents(){} // Creates all panels and sets visibility off, besides login
public static void main(String args[]){
new BookRental().setVisible(true);
}
}
我已经很确定自己完全错了,但是我的问题是为什么我不能在ClientInfoPanel内部访问currentClient?为这个JLabel说:
infoPanelUserName.setText("Currently logged in as: " + currentClient.getUsername());
ClientInfoPanel识别currentClient存在,并且getUsername()方法存在,但是它打印:
“当前登录为:”
最佳答案
您显示的代码看起来不错,所以问题出在其他地方,或者该代码不能代表您拥有的代码。另外,您将成功访问currentClient,除非您遇到NullPointerException异常或将其捕获到某个地方,否则.getUsername()调用将得以解决。所以问题实际上出在.getUsername()上,以某种方式在调用.getUsername()时用户名未初始化;
作为测试,可以在调用.getUsername()之前立即在currentClient上调用.setUsername()吗?这应该有助于我们缩小问题的范围,将其隔离到类访问权限或正在初始化的变量中。
另外,您知道如何使用断点进行调试吗?您提到自己是新手,所以您可能不知道这是可能的。如果您使用的是Eclipse(或其他优秀的IDE),则可以设置断点并在DEBUG构建中运行该程序,那么当该程序到达您在其上设置断点的行时,该程序将冻结,并且您可以观察程序逐行移动行,并在程序更新变量时查看它们。 Google Java调试教程。 :)