2012-04-14 15 views
0

他のクラスから戻り値の型メソッドを呼び出そうとしていますが、クラスの型として定義されていないというエラーが発生し続けます。Java - 戻り値の型でメソッドを呼び出す方法

public MyTask() { 

    id = plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin,this,plugin.getConfig().getInt("StunDuration") * 20); 
    if(id == -1) 
    { 
     plugin.getLogger().warning("BLARG"); 
    } 
    } 

私は別のクラスからそのメソッドを呼び出す方法:ここで私は呼んしようとしているコードはありますか?

public class DamageListener implements Listener{ 
private antirelog plugin;  
public DamageListener (antirelog plugin) { 
    this.plugin = plugin; 
} 
    Player realplayer1; 
    Player realplayer2; 
    boolean playeradd = false; 
    private MyTask task; 
    public static boolean isDamaged = false; 
    public static boolean timerTask = true; 
    static Set<Player> Damagelist = Collections.newSetFromMap(new WeakHashMap<Player,Boolean>()); 

@EventHandler 
public void damage (EntityDamageEvent event) { 
Entity victim = event.getEntity(); 
if (event instanceof EntityDamageByEntityEvent) { 
    EntityDamageByEntityEvent edbeEvent = (EntityDamageByEntityEvent) event; 
    if(edbeEvent.getDamager() instanceof Player && victim instanceof Player) { 
     EntityDamageByEntityEvent edbeEvent1 = (EntityDamageByEntityEvent) event; 
     Entity attacker = edbeEvent1.getDamager(); 
     Player player = (Player) victim; 
     realplayer1 = player; 
     Player player2 = (Player) attacker; 
     realplayer2 = player2; 
     if(Damagelist.contains(realplayer1) || Damagelist.contains(realplayer2)) { 
      isDamaged = true; 
      timerTask = false; 
      System.out.println("Cancel"); 
      MyTask(); 
     } else { 
     Damagelist.add(realplayer1); 
     Damagelist.add(realplayer2);    
     isDamaged = true; 
     Pause ps = new Pause(plugin); 
     MyTask(); 
     } 

      } 

    } 

Heres the MyTaskクラス。

... 
isDamaged = true; 
Pause ps = new Pause(plugin); 
task = new MyTask(plugin); //Note the `new` keyword 
... 

はまた、いくつかの他のものを修正することができます:MyTask()以来

public class MyTask implements Runnable 
{ 

private antirelog plugin; 
private int id = -1; 

/** 
* Generic constructor 
* @param Plugin task is associated with 
* @return 
*/  
public MyTask (antirelog plugin) { 
this.plugin = plugin; 
} 
public void MyTask() { 

    id = plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin,this,plugin.getConfig().getInt("StunDuration") * 20); 
    if(id == -1) 
    { 
     plugin.getLogger().warning("BLARG"); 
    } 
    } 


/** 
* Do stuff when scheduler tells task to run 
*/ 
@Override 
public void run() 
{ 
    if (DamageListener.timerTask == true) { 
    DamageListener dl = new DamageListener(plugin); 
    dl.Then(); 
    } 
    else if (DamageListener.timerTask == false) { 
     plugin.getServer().getScheduler().cancelTask(id); 
     DamageListener.timerTask = true; 
    } 
} 

/** 
* Remove task from scheduler 
* @return True if successfully stopped. Else false. 
*/ 
public boolean stopTask() 
    { 
    if(id != -1) 
    { 
     plugin.getServer().getScheduler().cancelTask(id); 
     return true; 
    } 
    return false; 
    } 
} 
+0

おそらく、あなたは 'public void myTask(){'? – Torious

+0

より多くのコード、スタックトレース。私たちのお手伝いをしてください。これは不十分な質問です。詳細は不十分です。 – duffymo

+0

正確に何がエラーであり、達成しようとしているのは正確ですか? – amit

答えて

2

は、それがそうのように、newキーワードを付ける必要があり、クラスMyTaskのために、別のクラスでインスタンス化されるように、コンストラクタですあまりにも。

public MyTask (antirelog plugin) 
{ 
    this.plugin = plugin; 
    if (plugin != null) { 
     id = plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin,this,plugin.getConfig().getInt("StunDuration") * 20); 
     if (id == -1) 
     { 
      plugin.getLogger().warning("BLARG"); 
     } 
    } 
} 

//public MyTask() //Remove the void, this is a constructor 
//{ 
// this(null); //Call the extended constructor 
//} 
+0

私がそれをしようとすると、MyTask(antirelog)は私がそれを呼び出すクラスの型に対して未定義であると言われています。それが私が解決しようとしてきた問題です。 :\ –

+1

このメソッドはパラメータを受け取りません。 MyTask()を試してみてください –

+0

これは今述べています:MyTask()はTestClass(私が呼び出しているクラス)の型は未定義です。 –