2016-07-16 5 views
0

사용자를 위해 라이브러리를 작성하려고 시도하고 있으며 가능한 한 사용하기 쉽도록하고 싶습니다. 지금 당장은, 그것을 사용하기 위해 새로운 스레드를 시작하고 메인 클래스에서 추적 할 많은 변수를 설정해야하지만, 사용자는 항상 Java로 경험할 수있는 것은 아니며 일부 사용자의 경우 스레딩이 너무 어려울 수 있습니다 .메인 클래스에서 새 스레드를 시작하는 Java 클래스

그래서 전체 스레드를 내 클래스로 옮기고 사용자가 함수를 호출하여 스레드를 시작하도록하고 싶습니다. 여기

내가 현재 메인 클래스에서 실행 해요 스레드입니다 :

int valueToAdd = 0; 

DreamStatsTracker tracker = new DreamStatsTracker(); 

StartSessionResponse response = tracker.StartSession("ae-13s-90-11", "Abe"); 

System.out.println(response.getMessage()); 

System.out.println("Adding skill Herblore"); 

String message = tracker.AddSkill(response.getSessionId(), Skill.HERBLORE, "Abe"); 

Thread thread = new Thread(() -> { 
    while(true) { 
    tracker.SetValueForSkill(response.getSessionId(), Skill.HERBLORE, valueToAdd); 
    } 
}); 

내가 메인 클래스에서이 같은 DreamStatsTracker 클래스로 그 모든 일을 이동하고 뭔가를하고 싶습니다

DreamStatsTracker tracker = new DreamStatsTracker(); 

tracker.AddSkill(Skill1, ValueForSkill1); 

tracker.AddSkill(Skill2, ValueForSkill2); 

tracker.Start(); 

이렇게하면 DreamStatsTracker의 새 인스턴스가 시작되어 새 스레드가 시작되고 기본 클래스가 실행되는 동안 추가 된 스킬의 값이 백그라운드에서 계속 추적됩니다.

어떻게 접근합니까? 가능합니까?

+0

그래서 .. 당신이에'새 Thread' 초기화를 이동 싶어 DreamStatsTracker 메서드는'Start()'라고 부릅니까? –

+0

그 라인을 따라 뭔가 예. 추가 된 각 스킬에 대해 다음 코드를 실행하는 Start 메서드의 foreach 루프가 포함됩니다. tracker.AddSkill (response.getSessionId(), SkillName, "Username")); 스레드의 해당 스킬로 보낸 데이터를 지속적으로 추적합니다. – Jannik

+1

그래서 문제가 무엇입니까? 그냥 스레드 생성을 이동하고'tracker.start()'메소드로 시작하면됩니다. – Nikem

답변

0

마침내 시험하고 시험 한 시간까지 내 문제를 해결했습니다.

추적기 클래스 :

내가 무슨 짓을

Thread mainThread; 

public DreamStatsTracker(){ 
    mainThread = new Thread(() -> { 
     while(true){ 
      for (SkillAndValue skillAndValue : Skills) { 
       try { 
        SetValueForSkill(this.SessionId, skillAndValue.getSkill(), skillAndValue.getValue()); 
        System.out.println("Added value: " + skillAndValue.getValue()); 
       } catch (Exception e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      try { 
       Thread.sleep(2000); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    }); 

} 

public void AddSkillAndValue(Skill Skill, Callable<Integer> function) throws Exception{ 
    Skills.add(new SkillAndValue(Skill, function)); 
} 

public void Start(){ 
    for (SkillAndValue skillAndValue : Skills) { 
     AddSkill(this.SessionId, skillAndValue.getSkill(), this.Username); 
    } 
    this.mainThread.start(); 
} 

이 메인 클래스입니다 :

public static void main(String[] args) throws Exception { 

    DreamStatsTracker tracker = new DreamStatsTracker(); 

    tracker.StartNewSession("ae-13s-90-11", "Abe"); 

    tracker.AddSkillAndValue(Skill.HERBLORE, getRandomNumber()); 

    tracker.Start(); 

} 

private static Callable<Integer> getRandomNumber(){ 
    return new Callable<Integer>(){ 
     public Integer call(){ 
      Random random = new Random(); 
      return random.nextInt(10000); 
     } 
    }; 
} 
관련 문제