Java.lang.null pointer exception – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Java.lang.null pointer exception – Java – Fórum – Programujte.comJava.lang.null pointer exception – Java – Fórum – Programujte.com

 

Heru-ur
~ Anonymní uživatel
7 příspěvků
5. 6. 2015   #1
-
0
-

Zdravim,

delam ukol do skoly, ale v jave jsem uplny zacatecnik a nevim si rady s timhle. Jde o to, ze je to takova textova hra a pokud nemam urcity predmet u sebe a vstoupim do daneho prostoru, tak hra automaticky vyhraje. A jako ono to funguje az na to, ze mi hned nabehne i chyba a ja fakt nevim kde je problem. :( Tak prosim, poradte mi nekdo co s tim. Predem moc dekuji. Prikladam screeny...

Připojen obrázek.

Připojen obrázek.

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Kit+15
Guru
5. 6. 2015   #2
-
0
-

#1 Heru-ur
Pošli sem zdroják, ať si to mohu přečíst.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:221:5...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ingiraxo+15
Grafoman
5. 6. 2015   #3
-
0
-

Však v té vyjímce máš i soubory včetně čísla řádků, kde to padlo, na to nemusíš umět ani javu. Prostě se podívej do "PrikazJdi.java" na řádek 56 -> 82. krom toho pokud to padlo na "hra.setkonecHry(true)" a je to normální setter (neobsahuje další bordel než nastavení hodnoty), tak instance hry už neexistuje.. tzn. že podle toho jak to popisuješ se zlikviduje instance hned po tom, co PC vyhraje.. takže se podívat co se dělá (kde je ten kód), pokud vyhraje PC (resp. vstoupí do té místnosti) a jestli náhodou někde není "hra = null;"

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Heru-ur
~ Anonymní uživatel
7 příspěvků
5. 6. 2015   #4
-
0
-

#2 Kit 

to je ten prikazJdi



/**
 *  Třída PrikazJdi implementuje pro hru příkaz jdi.
 *  Tato třída je součástí jednoduché textové hry.
 *  
 *@author     
 *@version    
 */
class PrikazJdi implements IPrikaz {
    private static final String NAZEV = "jdi";
    private HerniPlan plan;
    private Hra hra;

    /**
     *  Konstruktor třídy
     *  
     *  @param plan herní plán, ve kterém se bude ve hře "chodit" 
     */    
    public PrikazJdi(HerniPlan plan) {
        this.plan = plan;
    }

    /**
     *  Provádí příkaz "jdi". Zkouší se vyjít do zadaného prostoru. Pokud prostor
     *  existuje, vstoupí se do nového prostoru. Pokud zadaný sousední prostor
     *  (východ) není, vypíše se chybové hlášení.
     *
     *@param parametry - jako  parametr obsahuje jméno prostoru (východu),
     *                         do kterého se má jít.
     *@return zpráva, kterou vypíše hra hráči
     */ 
    @Override
    public String proved(String... parametry) {
        if (parametry.length == 0) {
            // pokud chybí druhé slovo (sousední prostor), tak ....
            return "Kam mám jít? Musíš zadat jméno východu";
        }

        String smer = parametry[0];

        // zkoušíme přejít do sousedního prostoru
        Prostor sousedniProstor = plan.getAktualniProstor().vratSousedniProstor(smer);

        if (sousedniProstor == null) {
            return "Tam se odsud jít nedá!";
        }
        if (sousedniProstor.isZamcena()) {
            return "Místnost: '" + sousedniProstor.getNazev() + "' je uzamčena, musíš jí napřed odemknout";
        }
        else {
            if (sousedniProstor.getNazev().equals("tmavaJeskyne")) {
                if (plan.getBatoh().obsahujeVec("sekeraDrakobijce")) {
                    plan.setAktualniProstor(sousedniProstor);
                    return sousedniProstor.dlouhyPopis();
                }
                else {
                    hra.setKonecHry(true);
                    return "Prohral jsi.";
                }
            }
            else {
                plan.setAktualniProstor(sousedniProstor);
                return sousedniProstor.dlouhyPopis();
            }
            
        }
    }

    /**
     *  Metoda vrací název příkazu (slovo které používá hráč pro jeho vyvolání)
     *  
     *  @ return nazev prikazu
     */
    @Override
    public String getNazev() {
        return NAZEV;
    }

}
Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
JirkaEr0
Newbie
5. 6. 2015   #5
-
0
-

Tak jasně. Nemáš vytvořenou instanci třídy Hra.

Proměnná hra je rovna null.

Nahlásit jako SPAM
IP: 78.157.131.–
Heru-ur
~ Anonymní uživatel
7 příspěvků
5. 6. 2015   #6
-
0
-

och..nevim co jsem s tim udelal vsechno.. ted mi to zase neukonci hru jen rekne mi, ze jsem mrtvy, ale hraju dal..

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Heru-ur
~ Anonymní uživatel
7 příspěvků
5. 6. 2015   #7
-
0
-

prikazJdi jsem opravil takhle...

package logika;

/**
 *  Třída PrikazJdi implementuje pro hru příkaz jdi.
 *  Tato třída je součástí jednoduché textové hry.
 *  
 *@author     
 *@version    pro školní rok 2014/2015
 */
class PrikazJdi implements IPrikaz {
    private static final String NAZEV = "jdi";
    private HerniPlan plan;
    private Hra hra;
    

    /**
     *  Konstruktor třídy
     *  
     *  @param plan herní plán, ve kterém se bude ve hře "chodit" 
     */    
    public PrikazJdi(HerniPlan plan) {
        this.plan = plan;
        this.hra = hra;
    }

    
    /**
     *  Provádí příkaz "jdi". Zkouší se vyjít do zadaného prostoru. Pokud prostor
     *  existuje, vstoupí se do nového prostoru. Pokud zadaný sousední prostor
     *  (východ) není, vypíše se chybové hlášení.
     *
     *@param parametry - jako  parametr obsahuje jméno prostoru (východu),
     *                         do kterého se má jít.
     *@return zpráva, kterou vypíše hra hráči
     */ 
    @Override
    public String proved(String... parametry) {
        if (parametry.length == 0) {
            // pokud chybí druhé slovo (sousední prostor), tak ....
            return "Kam mám jít? Musíš zadat jméno východu";
        }

        String smer = parametry[0];

        // zkoušíme přejít do sousedního prostoru
        Prostor sousedniProstor = plan.getAktualniProstor().vratSousedniProstor(smer);

        if (sousedniProstor == null) {
            return "Tam se odsud jít nedá!";
        }
        if (sousedniProstor.isZamcena()) {
            return "Místnost: '" + sousedniProstor.getNazev() + "' je uzamčena, musíš jí napřed odemknout";
        }
        else {
            if (sousedniProstor.getNazev().equals("tmavaJeskyne")) {
                if (plan.getBatoh().obsahujeVec("!sekeraDrakobijce")) {
                    plan.setAktualniProstor(sousedniProstor);
                    return sousedniProstor.dlouhyPopis();
                }
                else {
                    hra.setKonecHry(true);
                    return "Prohral jsi.";
                   
                }
            }
            else {
                plan.setAktualniProstor(sousedniProstor);
                return sousedniProstor.dlouhyPopis();
            }
            
        }
    }

    /**
     *  Metoda vrací název příkazu (slovo které používá hráč pro jeho vyvolání)
     *  
     *  @ return nazev prikazu
     */
    @Override
    public String getNazev() {
        return NAZEV;
    }

}

no hodi mi to chybu tady jak je   ui.hraj();   a rika furt null pointer exception in prikazJdi..

package main;



import logika.*;
import uiText.TextoveRozhrani;

/*******************************************************************************
 * Třída {@code Start} je hlavní třídou projektu,
 * který ...
 *
 * @author    
 * @version   
 */
public final class Start
{
    /***************************************************************************
     * Metoda, prostřednictvím níž se spouští celá aplikace.
     *
     * @param args Parametry příkazového řádku
     */
    public static void main(String[] args)
    {
        
        IHra hra = new Hra();
        TextoveRozhrani ui = new TextoveRozhrani(hra);
        if(args.length == 0)
        {
            ui.hraj();
        }
        else
        {
            ui.hrajZeSouboru(args[0]);
        }
    }
    
    private Start(){}
}

ja jsem z toho uplne debil..zkousel jsem to i nejak jinak napsat, ale nejde mi to..

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
ingiraxo+15
Grafoman
5. 6. 2015   #8
-
0
-

#7 Heru-ur
však si to nijak neopravil... se pořádně podívej co si tam napsal 

    public PrikazJdi(HerniPlan plan) {
        this.plan = plan;
        this.hra = hra;
    }


nastavuješ null do null... ty musíš předat instanci Hra do toho objektu.. takže takto 

    public PrikazJdi(Hra hra, HerniPlan plan) {
        this.plan = plan;
        this.hra = hra;
    }

PS: nevím na co tam vytváříš interface, když ho nikde stejně nepoužíváš (aspoň z toho zdrojáku co si sem dal)

A herní plán by měl být součástí hry, je to podstatě jen strategie, kterou využívá konkrétní instance hry

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Heru-ur
~ Anonymní uživatel
7 příspěvků
5. 6. 2015   #9
-
0
-

#8 ingiraxo
i kdyz to udelam takhle, tak mi to porad vyhodi stejnou chybu..

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Heru-ur
~ Anonymní uživatel
7 příspěvků
5. 6. 2015   #10
-
0
-

uffff.. uz jsem to nejak udelal.. vypada ze to funguje.. dekuji za rady!!   

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Heru-ur
~ Anonymní uživatel
7 příspěvků
6. 6. 2015   #11
-
0
-

jeste prosim.. musim udelat dokumentaci pres javadoc, ale mi hodi chybu, kterou nemuzu najit nikde 

javadoc: error - The -encoding option may be specified no more than once

Nahlásit jako SPAM
IP: 2001:718:1e03:5184:9cfd:1...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 24 hostů

Podobná vlákna

Java.lang.NoClassDeffoundError — založil polerok

Exception esocketerror — založil ha2

Walhalla Exception — založil liske

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý