2012-04-14 11 views
0

Ich versuche, eine Rückgabetyp-Methode aus einer anderen Klasse aufzurufen, aber ich bekomme immer den Fehler, dass es für den Typ der Klasse nicht definiert ist. Hier ist der Code, den ich versuche anzurufen:Java-Wie rufe ich eine Methode mit einem Rückgabetyp

public MyTask() { 

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

Wie würde ich diese Methode aus einer anderen Klasse aufrufen?

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 die MyTask-Klasse.

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

Umm, vielleicht wollten Sie 'public void myTask() {'? – Torious

+0

Mehr Code, ein Stack-Trace. Hilf uns, dir zu helfen. Dies ist eine schlechte Frage - nicht genug Details. – duffymo

+0

Was ist der Fehler genau und was genau willst du erreichen? – amit

Antwort

2

Seit MyTask() ist ein Konstruktor für die Klasse MyTask, in einer anderen Klasse instanziiert werden, muss sie mit dem new Schlüsselwort vorangestellt werden, etwa so:

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

lässt sich auch ein paar andere Dinge beheben auch.

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

Wenn ich das versuche, heißt es, dass MyTask (antireLog) für den Typ der Klasse, von der ich es nenne, nicht definiert ist. Das ist das Problem, das ich versucht habe zu lösen. : \ –

+1

Die Methode benötigt keinen Parameter. Versuchen Sie nur MyTask() –

+0

Es sagt jetzt: MyTask() ist nicht definiert für den Typ TestClass (meine Klasse, die ich von ihm aufrufen). –

Verwandte Themen