Помогите Null Pointer

Статус
Закрыто для дальнейших ответов.

Fenix78563

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Blc_Dragon
Доброго времени суток, форумчане. Ловит NullPointer, хотя объект не null

Java:
public class moveBullet extends BukkitRunnable{
  
    private Player p;
    private Firework Bullet;

    public moveBullet(Player pl, Firework bul){
        this.p=pl;
        this.Bullet=bul;
    }
    final Vector vc = p.getLocation().getDirection();
    Double y = vc.getY();
  
    @Override
    public void run() {
        p.sendMessage("as"); //специально для проверки null
        if (Bullet.isDead()){
            cancel();
        }
        cancel();
    }

}
null в строке
Java:
final Vector vc = p.getLocation().getDirection();
Когда отключаю из кода строки
Java:
final Vector vc = p.getLocation().getDirection();
    Double y = vc.getY();
то все пашет. Даже сообщение приходит. Т.е. игрок не null

В чем подвох?
Заранее спасибо
 
Подвох в отсутствие стак трейса. Вангов нету.
 
Подвох в отсутствие стак трейса. Вангов нету.
Java:
[Poligon] Task #91 for Poligon v0.1 generated an exception
java.lang.NullPointerException
    at ru.blc.poligon.utils.moveBullet.<init>(moveBullet.java:17) ~[?:?]
    at ru.blc.poligon.entity.Bullet.launchBullet(Bullet.java:28) ~[?:?]
    at ru.blc.poligon.Shooting.onShot.run(onShot.java:21) ~[?:?]
    at org.bukkit.craftbukkit.v1_10_R1.scheduler.CraftTask.run(CraftTask.java:71) ~[server.jar:git-Spigot-90f61bc-6053c5c]
    at org.bukkit.craftbukkit.v1_10_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:350) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.MinecraftServer.D(MinecraftServer.java:723) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.DedicatedServer.D(DedicatedServer.java:400) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.MinecraftServer.C(MinecraftServer.java:668) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.MinecraftServer.run(MinecraftServer.java:567) [server.jar:git-Spigot-90f61bc-6053c5c]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_101]
[23:11:55] [Server thread/INFO]: Type-1[m
[23:11:55] [Server thread/WARN]: [Poligon] Task #92 for Poligon v0.1 generated an exception
java.lang.NullPointerException
    at ru.blc.poligon.utils.moveBullet.<init>(moveBullet.java:17) ~[?:?]
    at ru.blc.poligon.entity.Bullet.launchBullet(Bullet.java:28) ~[?:?]
    at ru.blc.poligon.Shooting.onShot.run(onShot.java:21) ~[?:?]
    at org.bukkit.craftbukkit.v1_10_R1.scheduler.CraftTask.run(CraftTask.java:71) ~[server.jar:git-Spigot-90f61bc-6053c5c]
    at org.bukkit.craftbukkit.v1_10_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:350) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.MinecraftServer.D(MinecraftServer.java:723) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.DedicatedServer.D(DedicatedServer.java:400) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.MinecraftServer.C(MinecraftServer.java:668) [server.jar:git-Spigot-90f61bc-6053c5c]
    at net.minecraft.server.v1_10_R1.MinecraftServer.run(MinecraftServer.java:567) [server.jar:git-Spigot-90f61bc-6053c5c]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_101]
 
Пробуй так.

Java:
public class moveBullet extends BukkitRunnable{
    private Player p;
    private Firework Bullet;
    public moveBullet(Player pl, Firework bul){
        this.p=pl;
        this.Bullet=bul;
    }
    @Override
    public void run() {
        Vector vc = p.getLocation().getDirection();
        Double y = vc.getY();
        p.sendMessage("as"); //специально для проверки null
        if (Bullet.isDead()){
            cancel();
        }
        cancel();
    }
}
 
Последнее редактирование:
Проверь дебагером. Как уже сказали, скорее всего p == null. Лучше сделать вот так:
Java:
public class moveBullet extends BukkitRunnable{
    private Player p;
    private Firework Bullet;
    private final  Vector vc;
    private double y;
    public moveBullet(Player pl, Firework bul){
        this.p=pl;
        this.Bullet=bul;
        if(pl =! null){
            vc = pl.getLocation().getDirection();
            y = vc.getY();
        } else {
           throw new NullPointerException("Объект player - null");
         }
    }
    @Override
    public void run() {
        p.sendMessage("as");
        if (Bullet.isDead()){
            cancel();
        }
        cancel();
    }
}
Т.е делать инициализацию в конструкторе. И проверьте, не передаете ли при создании экземпляра класса moveBullet в конструктор вместо игрока null.
 
Как уже сказали, скорее всего p == null.

Когда отключаю из кода строки
то все пашет. Даже сообщение приходит. Т.е. игрок не null
Угу, да. :)



Java:
private final Vector vc;
//че то пропущено
vc =pl.getLocation().getDirection();
Объявляете переменную как final (неизменяемая если что), а потом изменяете ее.
Я просто похлопаю

З.Ы. trow'инг игрока на null не проканал, он не null


Пробуй так. Или просто убери final и попробуй.

Java:
public class moveBullet extends BukkitRunnable{
    private Player p;
    private Firework Bullet;
    public moveBullet(Player pl, Firework bul){
        this.p=pl;
        this.Bullet=bul;
    }
    @Override
    public void run() {
        Vector vc = p.getLocation().getDirection();
        Double y = vc.getY();
        p.sendMessage("as"); //специально для проверки null
        if (Bullet.isDead()){
            cancel();
        }
        cancel();
    }
}

Спасибо, работает, но почему? В чем все таки был подвох?
 
Спасибо, работает, но почему? В чем все таки был подвох
В том что p был null? джаве почти пофиг на порядок строк для переменных. тоесть делая
Player p;
У тебя в любой переменой p будет null.(те что находятся не в методе)
Location loc=p.getLocation();//null
Чтобы такого небыло тебе нужно сделать так.
Player p;
Location loc;
метод(Игрок, еще чтото, и еще) {
p = Игрок;
loc= p.getLocation();
}
 
Угу, да. :)




Объявляете переменную как final (неизменяемая если что), а потом изменяете ее.
Я просто похлопаю

З.Ы. trow'инг игрока на null не проканал, он не null




Спасибо, работает, но почему? В чем все таки был подвох?
Ты работал с Player до конструктора, вот и был бублик.
 
Доброго времени суток, форумчане. Ловит NullPointer, хотя объект не null

Java:
public class moveBullet extends BukkitRunnable{
 
    private Player p;
    private Firework Bullet;

    public moveBullet(Player pl, Firework bul){
        this.p=pl;
        this.Bullet=bul;
    }
    final Vector vc = p.getLocation().getDirection();
    Double y = vc.getY();
 
    @Override
    public void run() {
        p.sendMessage("as"); //специально для проверки null
        if (Bullet.isDead()){
            cancel();
        }
        cancel();
    }

}
null в строке
Java:
final Vector vc = p.getLocation().getDirection();
Когда отключаю из кода строки
Java:
final Vector vc = p.getLocation().getDirection();
    Double y = vc.getY();
то все пашет. Даже сообщение приходит. Т.е. игрок не null

В чем подвох?
Заранее спасибо
Засунь эти строки "
  1. final Vector vc = p.getLocation().getDirection();
  2. Double y = vc.getY();
" в "public moveBullet"
 
Спасибо за ответы. В явке получается нельзя использовать методы вне методов?
 
//Хоть поставь это в конец класса, всеравно будет null; Хоть в начало. Везде null будет.
почему? мы же объявили игрока. или вы заявляете что ява нелинейный язык? (гугл заявляет что ява линейная)
 
почему? мы же объявили игрока. или вы заявляете что ДЖАВА нелинейный язык? (гугл заявляет что ДЖАВА линейная)
сначала инициализируются все поля, а только потом выполняется код конструктора
 
почему? мы же объявили игрока. или вы заявляете что ява нелинейный язык? (гугл заявляет что ява линейная)
Я тебе написал уже почему. Объект Player был пустым, потому что ты использовал его ДО конструктора, где ты назначаешь значения переменным. Сперва нужно инициализировать класс MyClass myclass new MyClass(передача значений); , а потом уже дальше работать с ними myclass.getUserVector(); Или же как писали выше, получить его сразу в конструкторе, где переменные определились уже.
 
Последнее редактирование:
Еще раз спасибо за ответы.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх