Erro de NullPointerException

Então, acho que não entendi muito bem. Fiz o seguinte: Criei mais uma classe chamada “Menus”, renomeei a antiga para “Iniciar”. Nessa nova classe Menus coloquei 2 métodos: menuPrincipal e menuCriarNavios. Em “Iniciar” eu instancio o objeto de Menus e faço menuPrincipal rolar enquanto nao receber 0(sair). Depois na classe principal eu finalmente instancio o objeto de Menus pra de fato rolar o jogo. Problemas: Não acontece nenhum erro porém não consigo mais execultar o jogo. Apenas constroi e pronto. Um outro problema que vinha enfrentando desde antes é que das opções de criar navios a unica que funciona é a 1(Criar navios Manualmente) e a 2(criar navio Aleatoriamente). Quando as outras opçoes, como por exemplo "criar navio tamanho 5 " é acionada, o programa cria um navio tamanho 2. isso acontece em todas as opções: Criar navio tamanho 2 3 4 e 5. Mesmo eu passando como parametro o tamanho respectivo desejado. Não entendi.
Veja como ficou minha organização do código:

[code]public class Menus {

Navio criarNavios = new Navio();
Mapa map = new Mapa();
Menssagens msg = new Menssagens();

public boolean menuPrincipal() {

    int escolha = msg.menuPrincipal(); //funcao apresenta menu principal
    boolean vfp = false;

    switch (escolha) {

        case 1:
            int size = msg.mapaSize();// funcao retorna tamanho do mapa
            map.criarMapa(size);
            break;
        case 2:
            JOptionPane.showMessageDialog(null, map.apresentarMapa());
            break;
        case 3:
            boolean vf;
            do {
                vf = this.menuCriacaoDeNavios();
            } while (vf = false);

            break;
        case 0:
            vfp = true;
            break;
    }
    return vfp;
}

public boolean menuCriacaoDeNavios() {
    boolean vf = false;
    int menu3_1 = msg.menuCriacaoNavios();

    switch (menu3_1) {// aqui é um sub menu do menu principal, aonde eu crio os navios da maneira como desejada
        case 1:
            criarNavios.criarNavioManualmente(map, msg.recebeDirecao(), msg.tamanhoDoNavio(), msg.recebeLinha(), msg.recebeColuna());
            break;

        case 2:
            criarNavios.criarNavioAleatoriamente(map);

            break;
        case 3:

            criarNavios.criarNavioDois(map, msg.recebeDirecao(), msg.recebeLinha(), msg.recebeColuna());
            break;
        case 4:
            criarNavios.criarNavioTres(map, msg.recebeDirecao(), msg.recebeLinha(), msg.recebeColuna());
            break;

        case 5:

            criarNavios.criarNavioDois(map, msg.recebeDirecao(), msg.recebeLinha(), msg.recebeColuna());
            break;

        case 6:
            criarNavios.criarNavioDois(map, msg.recebeDirecao(), msg.recebeLinha(), msg.recebeColuna());

        case 0:
            vf = true;
            break;
    }
    return vf;

}

}
[/code]

[code]public class Iniciar {

Menus menus = new Menus();

public Iniciar() {
    boolean loop;
    do {
        loop = menus.menuPrincipal();
    } while (loop == false);

}

}
[/code]

[code]public class Principal {

public static void main(String args[]) {

    
 Iniciar start=new Iniciar();   
}

}[/code]

Há ainda a classe Navio, Mensagens e Mapa. Vou mostrar um dos métodos da classe navio pra você ver se consegue identificar oque está errado com o problema da criação desses navios.

[code]public class Navio {

Menssagens m = new Menssagens();
Random random = new Random();//usada em criarNavioAleatoriamente

public void criarNavioManualmente(Mapa n, int direcao, int tamanho, int x, int y){…}
public void criarNavioAleatoriamente(Mapa n){…}
public void criarNavioDois(Mapa n, int direcao, int x, int y){…}
public void criarNavioTres(Mapa n, int direcao, int x, int y){…}
public void criarNavioQuatro(Mapa n, int direcao, int x, int y){…}
public void criarNavioCinco(Mapa n, int direcao, int x, int y) {

    this.inserindoNavio(n, direcao, 5, x, y);
}

public void inserindoNavio(Mapa n, int direcao, int tamanho, int x, int y) {

    switch (direcao) {
        case 1: //lembrando que 1 é horizontal
            System.out.println(tamanho);
            for (int a = 0; a < tamanho; a++) {
                Mapa.mapa[x][y] = tamanho;
                y++;

            }

            break;
        case 2:

            for (int a = 0; a < tamanho; a++) {
                Mapa.mapa[x][y] = tamanho;
                x++;

            }
            break;

    }

}

}
[/code]

Obrigado =D

Ops, desculpa. Eu suspeitei que fosse bug do programa. reiniciei o netBens aqui e o programa funcionou. Mas continuo com o problema da criação dos navios