したがって、私のプログラムは 2 つのクラスで構成されます。 1. JFrame を拡張する GUI を処理するメイン クラス。2. API を使用してサーバーから要求されたデータを要求および処理する MyClass には、さらに要求を処理する API クラスのインスタンスが必要です。(実行可能なクラスであり、API からラッパーを実装します)
したがって、メインクラス内で (Runnable Processor = new MyClass()) のように MyClass を単純にインスタンス化し、それを使用してスレッドを作成し、実行するとします。MyClass または API クラス メソッドのメソッドにアクセスできません (接続キラー メソッドに特に関心があります)。Processor.API.eDisconnect() のようにアクセスしようとしています。それはうまくいきません。
MyClass の Arraylist を作成し、MyClass のインスタンスをリストに追加します。Thread myThread = new Thread(List.get(0)) のようなスレッドを作成します。List.get(0).API.eDisconnect() のような API クラスのメソッドにアクセスできます。
では、なぜ 2 番目の方法が機能するのでしょうか。クラスインスタンスが独立変数であるか、リストにあるという唯一の違い。
どのような問題が発生する可能性がありますか? それを行うより良い方法はありますか?
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package basket;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
/**
*
* @author ivan
*/
public class Basket extends JFrame implements ActionListener{
protected List<TwsHandler> TWS = new ArrayList<>();
public static void main(String[] args)
{
Basket main = new Basket();
main.Launch();
}
public void Launch()
{
TWS.add(new TwsHandler());
BorderLayout MainLayout = new BorderLayout();
JButton Start = new JButton("Start");
Start.addActionListener(this);
Start.setActionCommand("Start");
JButton Stop = new JButton("Stop");
Stop.addActionListener(this);
Stop.setActionCommand("Stop");
this.setLayout(MainLayout);
this.add(Start , BorderLayout.SOUTH);
this.add(Stop , BorderLayout.WEST);
this.addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent e){System.exit(0);}
});
this.setTitle("Option basket robot");
this.setBounds(100, 100, 800, 600);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e)
{
switch (e.getActionCommand()) {
case "Start":
Thread Processor = new Thread(TWS.get(0));
Processor.start();
break;
case "Stop":
System.out.println(TWS.get(0).Eclient.isConnected());
break;
}
}
}