2

私は初心者の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() メソッドが存在することを認識しますが、次のように表示されます。

"現在ログイン中: "

4

2 に答える 2

0

あなたが示したコードは問題ないように見えるので、問題は別の場所にあるか、このコードはあなたが持っているものを代表していません. また、NullPointerException を取得するか、どこかでそれをキャッチしない限り、currentClient に正常にアクセスしていると、.getUsername() 呼び出しが解決されます。したがって、問題は実際には .getUsername() にあります。.getUsername() を呼び出すと、どういうわけかユーザー名が初期化されません。

テストとして、.getUsername() を呼び出す直前に currentClient で .setUsername() を呼び出すことができますか? これは、問題を絞り込み、クラス アクセスまたは初期化中の変数のいずれかに切り分けるのに役立ちます。

また、ブレークポイントを使用してデバッグする方法を知っていますか? あなたはあなたが新しいと言ったので、これが可能であることを知らないかもしれません。Eclipse (または別の優れた IDE) を使用している場合、ブレークポイントを設定して DEBUG ビルドでプログラムを実行すると、ブレークポイントを設定した行に到達するとプログラムがフリーズし、プログラムが行を移動するのを見ることができます。プログラムによって更新される変数を確認します。Google Java デバッグ チュートリアル。:)

于 2012-05-01T22:05:05.807 に答える
0

同意します(他の誰かがすでに回答しているので、追加する必要があるかどうかわかりません。エチケットは何ですか?)。これをうまく実行すると、BookRental コンストラクターで設定されているように、ユーザーが Me としてログインしているパネルが表示されました。

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

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 String username;
     private void setUsername(String u){
      username = u;
     }
     public String getUsername(){
      return username;
     }
   }


   public class ClientInfoPanel extends JPanel{      //Panel showing main menu.
      //At this point currentClient will contain values
      public ClientInfoPanel(){
         initComponents();
      }
      private void initComponents(){
         infoPanelUserName = new JLabel();
         infoPanelUserName.setText("Currently logged in as: " + currentClient.getUsername());
         this.add(infoPanelUserName);
      }
      private JLabel infoPanelUserName;
    }
   public ClientInfoPanel clientInfoPanel;


   //Constructor
   public BookRental(){
       currentClient.setUsername("Me");
       initComponents();
   } 
   private void initComponents(){
       clientInfoPanel = new ClientInfoPanel();
          this.add(clientInfoPanel);
          clientInfoPanel.setVisible(true);
   }

   public static void main(String args[]){

       new BookRental().setVisible(true);
   }
 }
于 2012-05-01T22:10:57.743 に答える