Estoy haciendo referencia PlayerUtil.getMovementSpeed(player); en mi clase Speed y en mi clase PlayerUtil, tengo el método definido como:
public static double getMovementSpeed(Player player) { //my code here }Pero cada vez que se hace referencia al método getMovementSpeed en mis otras clases, arroja este error:
java.lang.NoSuchMethodError: net.Swedz.util.PlayerUtil.getMovementSpeed(Lorg/bukkit/entity/Player;)DPensé que podría ser que Eclipse estaba exportando incorrectamente, pero lo reinicié y lo intenté de nuevo sin éxito.
EDITAR: Intenté descompilar el contenedor exportado, y el método public static double getMovementSpeed(Player player) existe en el contenedor exportado.
EDITAR: mi amigo también tiene un problema similar y está usando IntelliJ, por lo que Eclipse no es el problema.
EDITAR: Definición de clase para PlayerUtil:
package net.Swedz.util; public class PlayerUtil implements Listener { //getMovementSpeed is defined in here }Definición de clase para Velocidad:
package net.Swedz.hack.detect.move; public class Speed implements Hack, Listener { //my detection methods and method containing PlayerUtil.getMovementSpeed(player); } SOLUCIÓN: Descubrí por mi cuenta que tenía clases en conflicto entre dos complementos en mi servidor. Tenía un jar con net.Swedz.util.PlayerUtil y otro con net.Swedz.util.PlayerUtil ambos con contenido diferente. ¡Agregué el nombre de mi proyecto en minúsculas después de net.Swedz y parece haberlo solucionado!
¡Gracias!
Este es un problema muy simple de solucionar. ha usado ese método y pudo compilar esa clase que usa este método.
eso significa que en el momento de la compilación, encierra la clase PlayerUtil que tiene este método.
Pero el cargador de clases en tiempo de ejecución ha cargado la clase PlayerUtil que no contiene este método. ahora lo que tiene que hacer es averiguar de dónde se ha cargado esa clase (en tiempo de ejecución)
si puede recrear el problema mientras se ejecuta usando eclipse/IDEA, siga estos pasos. (si se ejecuta en el servidor de aplicaciones o en una aplicación independiente, inicie el servidor de aplicaciones o la aplicación con la depuración habilitada y puede realizar la depuración remota desde su IDE).
PlayerUtil.class.getResource("PlayerUtil.class")4. Puede encontrar la ruta desde donde se cargó la clase.
ahora tiene dos opciones, descompilar la clase y verificar si ese método es este (mismo tipo de retorno, mismo nombre, mismos argumentos).
o en depuración, puede evaluar PlayerUtil.class.getDeclaredMethods() para averiguarlo.
Entonces puede resolver el problema rectificando las entradas de la ruta de clase si se cargó desde un lugar incorrecto.