所以我的程序由两个类组成 1.我的主要类处理GUI扩展了JFrame,所以我需要实例化它来配置我的JFrame。 2. MyClass使用API来请求和处理从服务器请求的数据,该API必须具有处理请求的API类的实例。 (它是一个可运行的类,并实现API封装)从另一个类实例(调用方法)获取一个类实例
因此,如果我简单地实例类MyClass(Runnable Processor = new MyClass()),在我的主类中创建一个线程并运行。我不能访问MyClass或API类方法的方法(我特别感兴趣的是连接杀手方法)。我试图访问它像Processor.API.eDisconnect()。那不起作用。
但是,如果这样做:创建一个MyClass的Arraylist,然后添加一个MyClass的实例到列表中。创建一个线程,如Thread myThread = new Thread(List.get(0))。我可以访问我的API类的方法,如List.get(0).API.eDisconnect()。
那么,为什么第二种方法的工作?唯一的区别是类实例是一个独立变量或者在一个列表中。
是否正确实践会发生什么问题?有没有更好的方法来做到这一点?
/*
* 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;
}
}
}
显示'main'的代码。 – bellum
你能告诉我们什么不起作用,并解释你的意思吗? –
请学习Java命名约定,并遵守它们。变量以小写字母开头。 –