2012-11-29 6 views
-1

그래서 내 프로그램은 두 클래스로 구성됩니다. 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; 

     } 
    } 
} 
+3

'main '의 코드를 보여주세요. – bellum

+0

작동하지 않는 것을 우리에게 보여줄 수 있습니까? –

+0

Java 명명 규칙을 배우고 따르십시오. 변수는 소문자로 시작합니다. –

답변

1

유일한 차이점은 '케이되는 두 번째 경우는, ArrayList 통해 MyClass (로 참조하는 반면, 첫 번째 경우,하기, Runnable 같은 MyClass 인스턴스를 참조하는 점이다 어떤 목적으로도 봉사하지 마십시오). 대신

MyClass processor = new MyClass(); 

당신이 MyClass 메소드를 호출 할 수 있도록하려는 때문에

Runnable processor = new MyClass(); 

사용

.

+0

고마워, 나는 그것이 그렇게 많이 바뀔 것이라고는 생각하지 않았다. – user1633277

관련 문제