0

我正在尝试从另一个类调用返回类型方法,但我不断收到错误,即该类的类型未定义。这是我试图调用的代码:

   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;
  }
}
4

1 回答 1

2

由于MyTask()是构造函数,对于 class 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
//}
于 2012-04-14T23:47:43.947 回答