0

Scanner クラスの複数のインスタンスが実行されないようにするにはどうすればよいですか? スレッドやロックなどに関する情報がありますが、アプリケーションでそれらを動作させることができません。たとえば、[Pay] をクリックすると、Scanner のインスタンスが表示され、[Cancel] をクリックすると Pay が作成されます。次に Pay をクリックすると、スキャナーの数が 2 倍になります。簡単な要約を次に示します。

@ PlaceOrder.java、私は持っています:

btnPay.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) 
{
    java.awt.EventQueue.invokeLater(new Runnable() 
    {
           public void run() 
           {
                 PlaceOrder.this.setVisible(false);

                 new boundary.ScannerUI().setVisible(true);  
                 PlaceOrder.this.dispose();                                 
           }
    });             

} });

@ Scanner.java、私は持っています:

btnCancel.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent evt)
            {
                //ScannerUI.this.setVisible(false);
                //ScannerUI.this.dispose();                     

                new boundary.PlaceOrder().setVisible(false);
                ScannerUI.this.dispose();
            }
        }); 
4

2 に答える 2

-1

の 1 つのインスタンスを再利用したい場合はScannerUI、そのコンストラクターを呼び出さないでください。代わりに、インスタンスを作成して静的変数に保存するファクトリ メソッドを提供します。基本的な考え方:

static ScannerUI instance;

ScannerUI newScanner() {
   return instance == null || instance.isDisposed()? 
      instance = new ScannerUI() : instance;
}
于 2013-11-03T18:58:39.843 に答える