그래서 내 프로그램은 두 클래스로 구성됩니다. 1. JFrame을 확장하는 기본 클래스 처리 GUI로 인스턴스를 만들어 JFrame을 구성해야합니다. 2. 요청을 처리하는 API 클래스의 인스턴스가 있어야하는 API를 사용하여 서버에서 요청 된 데이터를 요청하고 처리하는 MyClass. (runnable 클래스와 API의 래퍼 임 플리 브)다른 클래스 인스턴스 (메서드 호출)에서 클래스 인스턴스에 액세스
그래서 (Runnable Processor = new MyClass()와 같이 MyClass를 인스턴스로 만들고, 메인 클래스 내에서 스레드를 만들고 실행합니다. MyClass 또는 API 클래스 메서드의 액세스 메서드는 사용할 수 없습니다 (특히 연결 킬러 메서드에 관심이 있습니다). 나는 Processor.API.eDisconnect()처럼 그것에 접근하려하고있다. 그 doesnt 일.
하지만 그렇게하는 경우 : MyClass의 Arraylist를 만든 다음 MyClass의 인스턴스를 목록에 추가하십시오. Thread myThread = new Thread (List.get (0))와 같은 스레드를 작성하십시오. List.get (0) .API.eDisconnect()와 같은 API 클래스의 메소드에 액세스 할 수 있습니다.
두 번째 방법은 왜 작동합니까? 클래스 인스턴스가 독립 변수이거나 목록에있는 유일한 차이점입니다.
어떤 문제가 발생할 수 있습니까? 그것을 할 수있는 더 좋은 방법이 있습니까?
/*
* 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 명명 규칙을 배우고 따르십시오. 변수는 소문자로 시작합니다. –