2012-04-14 37 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(); 
     } 

      } 

    } 

繼承人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 2012-04-14 23:47:41

+0

更多代碼,堆棧跟蹤。幫助我們幫助你。這是一個糟糕的問題 - 沒有足夠的細節。 – duffymo 2012-04-14 23:47:57

+0

究竟是什麼錯誤,你到底想要達到什麼目的? – amit 2012-04-14 23:48:18

回答

2

由於MyTask()是一個構造函數,爲類MyTask,在其他的類實例化,它必須與new關鍵字爲前綴,像這樣:

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

也讓修正了一些其他的事情太。

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)對於我從中調用它的類的類型是未定義的。這是我一直試圖解決的問題。 :\ – 2012-04-14 23:52:47

+1

該方法不帶參數。嘗試只是MyTask() – 2012-04-14 23:53:48

+0

它現在說:MyTask()是未定義的類型TestClass(我的類,我叫它從)。 – 2012-04-15 00:08:52