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 に答える