0

あるフレームから別のフレームへの移行時に一時的な読み込み画面が必要です。メインフレームでは、他の画面 (employmentframe) を作成するロード画面を作成します。作成するだけで、まだ表示されません。

雇用フレームでは、loadframe でloadingframe.setloadingbar()メソッドを呼び出すいくつかのメソッドを配置しました。setloadingbarこれは 100 に達するまで完璧に機能getvalue() == 100employmentframeますnullpointerexception。雇用スクリーンが作成されているため、これは奇妙です。

コードは以下です -

雇用枠:

   public EmploymentFrame(int eid, JFrame thisframe) {         
        initComponents();
        //loadCaseFileList();
        e_id = eid;
        loadCourseList();
        EmploymentFrame.thisframe = thisframe;
        LoadingFrame.setLoadingBar(1);
    }
    public static void setEmploymentFrameVisible()
    {
       thisframe.setVisible(true);
    }

ローディングフレーム:

private static JFrame Employmentframe;
private static int oldvalue;
private int e_id;
public LoadingFrame(int type, int eid) {
    initComponents();
    this.e_id = eid;
    if(type == 1)
    {
        Employmentframe = new EmploymentFrame(eid, Employmentframe); 
    }
}

   public static void setLoadingBar(int load)
   {
       oldvalue = LoadingBar.getValue();
       System.out.println(""+oldvalue);
       int newvalue = oldvalue+load;
       System.out.println("nv"+newvalue);
       LoadingBar.setValue(newvalue);
       if(LoadingBar.getValue() == 100)
       {
           EmploymentFrame.setEmploymentFrameVisible();
       }
   }

ありがとう。

4

1 に答える 1

1

スタックトレースは、この行がスローしていることを示していますNPE

thisframe.setVisible(true);

そうthisframeですnull

Employmentframeここで作成すると

Employmentframe = new EmploymentFrame(eid, Employmentframe); 

まだ初期化さnullれていないため、コンストラクターに引数として渡しています。JFrame実際、EmploymentFrameにそれ自体のインスタンスを渡す必要はありません。


他にもいくつかの問題があります。

  • 静的メソッドは、どの OO 言語でも設計上の選択として不適切と見なされています。
  • 複数JFramesは管理が難しいと考えられます。推奨される代替手段は、1.)単一のCardLayoutJFrameまたは 2.) 複数のウィンドウ必要な場合は、単一JFrameのモーダルJDialogを使用できます。ここでも議論されています。
  • Java のコード規則では、変数は小文字で始める必要があることを示しています。
于 2013-01-27T11:53:49.037 に答える