Проблеми с метода на теглене

Така че имам проблем с игра отбранителна кула, която правя в момента. Публикувах части от кода по-долу, с които имам грешка.

Изводът от това е, че стартирам играта с главното меню, което има бутон за влизане в charMenu или излизане от играта. Този екран се зарежда перфектно.

Сега, когато щракна, за да отида в charMenu, получавам NullPointerException на реда "charMenu.draw(g)". Ако създам само едно от менютата и премахна кода за другото, то работи добре и за двете, но ако се опитам да активирам кода и за двете, получавам грешката и нямам представа от отстраняването на грешки какво би могло бъда.

public class Screen extends JPanel implements Runnable {

public static boolean isMainMenu = true;
public static boolean isCharacterMenu = false;
public static MainMenu mainMenu;
public static CharMenu charMenu;

public void paintComponent(Graphics g) {

if(isMainMenu && !isCharacterMenu){ // Draws the Main Menu
        mainMenu.draw(g);
    }
    if(isCharacterMenu && !isMainMenu){
        charMenu.draw(g);
    }
    if(!isMainMenu && !isCharacterMenu){
        //draws the actual game board.
    }
}

public void run() {
    while(true) {
        if(isMainMenu && !isCharacterMenu){//The Main Menu
            mainMenu = new MainMenu();
        }
        if(isCharacterMenu && !isMainMenu)
            charMenu = new CharMenu();
        if(!isMainMenu && !isCharacterMenu) {
             //runs the game board
}

person cjr    schedule 11.08.2012    source източник


Отговори (1)


вие извиквате метод (draw () ) на нулева препратка ( charMenu ), затова се задейства NPE.

декларирането им в началото трябва да го направи.

public static MainMenu mainMenu =  new MainMenu();
public static CharMenu charMenu = new CharMenu();

АКТУАЛИЗАЦИЯ

трябва също така да актуализирате променливите си isCharactereMenu и isMainMenu в рамките на функцията за изпълнение - например след деклариране на charMenu - задайте isCharactereMenu на true

person MimiEAM    schedule 11.08.2012
comment
Това, което се случва тогава, е, че и двете менюта се създават едновременно и се наслагват едно върху друго, вместо да се създават отделно, когато бъдат извикани. - person cjr; 12.08.2012
comment
О, аз само си мислех за разрешаване на NPE... позволете ми да погледна още веднъж действителната логика на вашия код - person MimiEAM; 12.08.2012
comment
Да, това реши NPE, но създаде различен проблем. По принцип това, което се опитвам да направя, е да имам 2 различни менюта, които имат достъп едно до друго. - person cjr; 12.08.2012
comment
Добре, какво ще кажете за промяна на видимостта в зависимост от тази, която искате да се показва? mindprod.com/jgloss/setvisible.html - person MimiEAM; 12.08.2012
comment
Измислих начин да го направя с метода repaint(). Това, което се случваше, беше, че рисувах само веднъж, което причиняваше грешката. - person cjr; 17.08.2012
comment
страхотно, трябва да актуализирате този въпрос в публикацията с вашето правилно решение за други, които може да срещнат същия проблем :) - person MimiEAM; 18.08.2012