2012-03-21 16 views
2

私は3つのJavaファイル(Login.java、Sales.java)を持っています。他の3つのjavaファイルに変数 "Username"を渡して、Sales.javaが " Sales.javaで異なるJavaファイルのゲッターセッターメソッド

public class LoginStaff { 
    private String Username; 
    public void LoginStaff() { 
    } 
    public void LoginStaff(String Username) { 
     this.Username = Username; 
    } 
    public String getUsername() { 
     return this.Username; 
    } 
    public void setUserame(String Username) { 
     this.Username = Username; 
    } 
} 

Login.java enter image description here

... 
String login = tfusername.getText(); 
LoginStaff loginstaff = new LoginStaff(); 
loginstaff.setUserame(login); 
... 

で:構築、

これは私が行って何である」loginstaff.javaをユーザー名enter image description here ... LoginStaff loginstaff = new LoginStaff(); System.out.println(loginstaff.getUsername()); ...

問題は私がSalesでUsernameを取得できないこと、「null」を返したことです。 これは、新しいクラスのオブジェクトに関連するものですが、これを修正する方法はわかりません。

+0

? – Rakesh

+0

はい別のjavaファイルからユーザー名文字列を渡したいと思いますか? –

+2

これは、(1)あなたが 'LoginStaff'の別のインスタンスを使用しているようですが、2番目はフィールドが設定されていないデフォルトオブジェクトです。 1)すぐにより良い助けを得るために、[SSCCE](http://sscce.org/)を投稿してください。 –

答えて

6

それはあなたがそれを呼び出す場所の問題ではありません - それは2つの異なるオブジェクトであるという問題です。これは、単一の方法で同じ問題を示します。

public void showProblem() { 
    LoginStaff staff1 = new LoginStaff(); 
    // Assume typo in method name is fixed 
    staff1.setUsername("foo"); 

    LoginStaff staff2 = new LoginStaff(); 
    System.out.println(staff2.getUsername()); // Prints null 
} 

2つの異なるオブジェクトには、意図的で良いことが2つあります。新しいオブジェクトを作成したり、別のオブジェクトに設定したすべてのフィールド値を持つことはできません。

基本的に問題は、コードがコードで作成されたLoginStaffオブジェクトについて知る必要があるということです。あなたのデザインについてもっと知らなくても、私たちは本当にそれを達成する最良の方法を教えてくれません。 Sales.java

... 
LoginStaff loginstaff = new LoginStaff(); 
loginstaff.getUsername(); 
... 

0

ここでは1行目は、文字列型の場合ヌルある変数のデフォルトの初期化を使用して新しいオブジェクトを作成します。 getUsername()を使用する前に、setUsername()メソッド

を呼び出すか、そうでない場合はでcunstrocterを作成LoginStaffオブジェクトを受け入れSales.javaをし、Login.javaでユーザ名を設定した後にしなければなりませんそのオブジェクトをSales.javaSales.javaに渡す代わりに、LoginStaffオブジェクトを作成し、渡されたオブジェクトを格納しますログインします。Javaのその後、getUsername()を使用し

1

一つのクラスでは、あなたがこれを行う場合は、次の

LoginStaff loginstaff = new LoginStaff(); 
loginstaff.getUsername(); 

あなたは別の2を作成している:

LoginStaff loginstaff = new LoginStaff(); 
loginstaff.setUserame(login); 

そして、他のクラスでは、あなたがこれを行う

オブジェクト。したがって、第2のオブジェクトについては、 UserNameは決して設定されなかった。同じオブジェクトにアクセスしたい場合は、そのオブジェクトを参照する必要があります。回避策は、オブジェクトが初期化されたときに LoginStaffオブジェクトを渡すことです。これにより、同じ設定にアクセスすることができます。

0

販売オブジェクトを作成するときは、MainClass(this)パラメータを指定することをお勧めします。明らかにこれを反映するために販売コンストラクタを更新してください。これにより、販売クラスに同じMainClassを格納することができます。これを使用して、名前など、必要なものを照会することができます。

基本的にSales s1 = new Sales(this);

私はUIバークラスを持っていたのと同様のプロセスがありましたが、ユーザーがUIのボタンをクリックしたときに動作するメインクラスのメソッドを起動する必要がありました。私がやったやり方は、私のメインクラスの上にクラス全体のフィールドがありました。これは基本的

:あなたは `Sales`クラスでユーザ名を設定していない

public class MainClass() { 
private InterfaceTab interfaceTab; 
//Instantiate the field in the constructor or main method of MainClass, so that way both classes can access each other: 
interfaceTab = new InterfaceTab(this); 
関連する問題