Erro ao ler ArrayList em outra classe

Boa noite gente, sou novo na linguagem java, estou com um problema no meu projeto. Não estou conseguindo listarRota. Quando vou acessar o Menu de compras e coloca na opção Listar rotas, da erro. Se alguém tiver alguma solução. Não sei se ficou bem explicado.

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Cadastro {

Scanner ent = new Scanner (System.in);
private String op;
private List<Estacao> dados;
public List<Rota> dadosRota;
private List<Trem> dadosTrem;



public void cadastrarEstacao () {
	
	boolean permissao = true;
	
	dados = new ArrayList<Estacao> ();
	
	
	while (permissao) {
	Estacao e = new Estacao();
	System.out.println("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
	System.out.println("Nome da estação: ");
	this.op = ent.nextLine();
	e.setNome(this.op);
	System.out.println("Cadastrar estação: S/N ");
	this.op = ent.nextLine();
	
	if(this.op.equals("s") || this.op.equals("S") ) {
		dados.add(e);
		System.out.println("Cadastro adcionado!");
	}else if (this.op.equals("n")) {
		System.out.println("Cadastro ignorado!");
	}else {
		System.out.println("Opção invalida!");
	}
	System.out.println("Aperte qualquer tecla para continuar cadastrando ou [N] para sair:");
	this.op = ent.nextLine();
	
	if(this.op.equals("N") ) {
		permissao = false;
	}else if (this.op.contentEquals("s")) {
		
	}else {
		permissao = false;
	}
	
	}

}
public void listarEstacao () {

	
	if (dados.size() == 0) {
		System.out.println("Nâo tem nenhuma estação cadastrada!!!");
	}else {
		for (int i = 0; i < dados.size(); i++) {
			System.out.println(dados.get(i).getNome());
		}
	}
	
}

public void cadastrarRota () {
	
	boolean permissao = true;
	dadosRota =new ArrayList<Rota>();
	
	while(permissao) {
		
		Rota r = new Rota();
		
		System.out.println("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
		
		System.out.println("Nome da rota:");
		this.op = ent.nextLine();
		r.setNome(this.op);
		
		System.out.println("Digite todas as estações que compõem a essa rota: ");
		this.op = ent.nextLine();
		r.setEstacao(this.op);
		
		System.out.println("Cadastrar rota: S/N ");
		this.op = ent.nextLine();
		
		if(this.op.equals("s") || this.op.equals("S") ) {
			dadosRota.add(r);
			System.out.println("Cadastro adcionado!");
		}else if (this.op.equals("n")) {
			System.out.println("Cadastro ignorado!");
		}else {
			System.out.println("Opção invalida!");
		}
		System.out.println("Aperte qualquer tecla para continuar cadastrando ou [N] para sair:");
		this.op = ent.nextLine();
		
		if(this.op.equals("N") || this.op.equals("n") ) {
			permissao = false;
		}else if (this.op.contentEquals("s") || this.op.contentEquals("S")) {
			
		}else {
			permissao = false;
		}
		
		}

	}
public void listarRota() {
	
	if(dadosRota.size() == 0) {
		System.out.println("Nenhuma rota cadastrada!!!");
	}else {
		for (int i = 0; i < dadosRota.size(); i++) {
			System.out.println("Rota: "+ dadosRota.get(i).getNome());
			System.out.println("Estações: " + dadosRota.get(i).getEstacao());
		}
	}
	
}

import java.util.ArrayList;
import java.util.Scanner;

public class Menu {
private int op;
Scanner ent = new Scanner(System.in);

public void menuOp () {
    
	while(true) {
	System.out.println("===== Bem Vindo =====");
	System.out.println("DIGITE A OPÇÃO DESEJADA:");
	System.out.println("1 - Menu de cadastros:");
	System.out.println("2 - Menu de compras:");
	String op = ent.nextLine();
	
	switch (op) {
	
	case "1": 
		
		System.out.println("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=");
		System.out.println("O que deseja cadastrar: ");
    	System.out.println("Trem: [1]");
    	System.out.println("Estação: [2]");
    	System.out.println("Cadastrar rota: [3]");
	    op = ent.nextLine();
	    
	    if (op.equals("1")) {
	    	
	    	menuTrem();
	    	
	    }else if (op.contentEquals("2")) {
	    	
	    	menuEstacao();
	
	    }else if (op.contentEquals("3")) {
	    	
	    	menuRota();
	    	
	    }else {
	    	System.out.println("Opção errada, favor digitar novamente!");
	    }
	    
		break;

	case "2":
		
		menuCompras();
		
		break;
		
		
	}
	}
}

public void menuEstacao() {
	boolean permissao = true; 
	Cadastro c = new Cadastro();
	while (permissao) {
	System.out.println("=-=-=-=-= Menu de cadastro de estações =-=-=-=-=");
	System.out.println("Selecione a opção:");
	System.out.println("N - Novo cadastro");
	System.out.println("L - Listar cadastros");
	System.out.println("X - Sair");
	String op = ent.nextLine();
	
		   if(op.equals("n")) {
			   c.cadastrarEstacao();
		   }else if (op.equals("l")){
			   c.listarEstacao();
		   }else if (op.equals("x")) {
			   permissao = false;
		   }else {
			   System.out.println("\nOpção invalida!");
		   }
    }
	
	
}

public void menuRota () {
	boolean permissao = true; 
	Cadastro c = new Cadastro();
	while (permissao) {
	c.dadosRota = new ArrayList <Rota>();
	System.out.println("=-=-=-=-= Menu de cadastro de rotas =-=-=-=-=");
	System.out.println("Selecione a opção:");
	System.out.println("N - Novo cadastro");
	System.out.println("L - Listar cadastros");
	System.out.println("X - Sair");
	String op = ent.nextLine();
	
		   if(op.equals("n")) {
			   c.cadastrarRota();
		   }else if (op.equals("l")){
			   if (c.getDadosRota() == null) {
				   System.out.println("nenhum item na lista!");
			   }else {
			   c.listarRota();
			   }
		   }else if (op.equals("x")) {
			   permissao = false;
		   }else {
			   System.out.println("\nOpção invalida!");
		   }
    }
}

public void menuTrem () {

boolean permissao = true; 
	Cadastro c = new Cadastro();
	
	while (permissao) {
	System.out.println("=-=-=-=-= Menu de cadastro de trens =-=-=-=-=");
	System.out.println("Selecione a opção:");
	System.out.println("N - Novo cadastro");
	System.out.println("L - Listar cadastros");
	System.out.println("X - Sair");
	String op = ent.nextLine();
	
		   if(op.equals("n")) {
			   c.cadastrarTrem();
		   }else if (op.equals("l")){
			   c.listarTrem();
		   }else if (op.equals("x")) {
			   permissao = false;
		   }else {
			   System.out.println("\nOpção invalida!");
		   }
    }

}

public void menuCompras () {

boolean permissao = true;
Cadastro c = new Cadastro();

System.out.println("=-=-=-= Bem vindo ao menu de compras =-=-=-= ");
	System.out.println("Digite a opção desejada:");
	System.out.println("1-Ver rotas:");
	System.out.println("2-Realizar compra:");
	System.out.println("3-Sair:");
	String op = ent.nextLine();
	
	while (permissao){
		   
		   if (op.equals("1")) {
		      c.listarRota();
		   }else if(op.equals("2")) {
			   System.out.println("");			      
		   }else if (op.equals("3")) {
			   permissao = false;
		   }else {
			   System.out.println("Opção invalida!");
		   }
		}

}

public int getOp() {
	return op;
}

public void setOp(int op) {
	this.op = op;
}

}

Qual é o erro? Poste a mensagem de erro completa.

@Marc0s
boa tarde, fiz uma pequena revisão para que funcione do jeito que está, porém ainda existem várias melhorias que você pode implementar. Também usei a API do lombok para não ter que fazer os construtores, gets e sets, então considere você mesmo implementar.

Quanto ao erro que estava ocorrendo, era um nullpointer por quê vc estava verificando o tamanho de uma lista que não tinha instanciado. (list.size == 0)

public class Main {

    public static void main(String[] args) {
        new Menu().start();
    }

}

Classe de Menu

import java.util.Scanner;

public class Menu {

    private final Scanner input;
    private final Cadastro cadastro;

    public Menu() {
        input = new Scanner(System.in);
        cadastro = new Cadastro();
    }

    public void start() {
        while (true) {
            System.out.print("===== Bem Vindo =====\n"
                    + "DIGITE A OPÇÃO DESEJADA:\n"
                    + "1-Menu de cadastros:\n"
                    + "2-Menu de compras:\n"
                    + "Opção > "
            );
            switch (input.nextInt()) {
                case 1:
                    menuCadastro();
                    break;
                case 2:
                    menuCompras();
                    break;
            }
        }
    }

    private void menuCadastro() {
        System.out.print("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n"
                + "O que deseja cadastrar: \n"
                + "1-Trem\n"
                + "2-Estação\n"
                + "3-Rota\n"
                + "Opcão > "
        );
        switch (input.nextInt()) {
            case 1:
                menuTrem();
                break;
            case 2:
                menuEstacao();
                break;
            case 3:
                menuRota();
                break;
            default:
                System.out.println("Opção errada, favor digitar novamente!");
        }
    }

    private void menuEstacao() {
        boolean cnt = true;
        while (cnt) {
            System.out.print("=-=-=-=-= Menu de cadastro de estações =-=-=-=-=\n"
                    + "Selecione a opção:\n"
                    + "1-Novo cadastro\n"
                    + "2-Listar cadastros\n"
                    + "3-Sair\n"
                    + "Opção > "
            );
            switch (input.nextInt()) {
                case 1:
                    cadastro.cadastrarEstacao(input);
                    break;
                case 2:
                    cadastro.listarEstaoes();
                    break;
                case 3:
                    cnt = false;
                    break;
                default:
                    System.out.println("\nOpção invalida!");
            }
        }
    }

    private void menuRota() {
        boolean cnt = true;
        while (cnt) {
            System.out.print("=-=-=-=-= Menu de cadastro de rotas =-=-=-=-=\n"
                    + "Selecione a opção:\n"
                    + "1-Novo cadastro\n"
                    + "2-Listar cadastros\n"
                    + "3-Sair\n"
                    + "Opção > "
            );
            switch (input.nextInt()) {
                case 1:
                    cadastro.cadastrarRota(input);
                    break;
                case 2:
                    cadastro.listarRotas();
                    break;
                case 3:
                    cnt = false;
                    break;
                default:
                    System.out.println("\nOpção invalida!");
            }
        }
    }

    private void menuTrem() {
        boolean cnt = true;
        Cadastro cadastro = new Cadastro();
        while (cnt) {
            System.out.print("=-=-=-=-= Menu de cadastro de trens =-=-=-=-=\n"
                    + "Selecione a opção:\n"
                    + "1-Novo cadastro\n"
                    + "2-Listar cadastros\n"
                    + "3-Sair\n"
                    + "Opção > "
            );
            switch (input.nextInt()) {
                case 1:
                    cadastro.cadastrarTrem(input);
                    break;
                case 2:
                    cadastro.listarTrens();
                    break;
                case 3:
                    cnt = false;
                    break;
                default:
                    System.out.println("\nOpção invalida!");
            }
        }

    }

    private void menuCompras() {
        boolean cnt = true;
        System.out.print("=-=-=-= Bem vindo ao menu de compras =-=-=-= \n"
                + "Digite a opção desejada:\n"
                + "1-Ver rotas\n"
                + "2-Realizar compra\n"
                + "3-Sair\n"
                + "Opção > "
        );
        while (cnt) {
            switch (input.nextInt()) {
                case 1:
                    cadastro.listarRotas();
                    break;
                case 2:
                    System.out.println("Função não implementada");
                    break;
                case 3:
                    cnt = false;
                    break;
                default:
                    System.out.println("Opção invalida!");
            }
        }
    }

}

Classe de cadastro

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Cadastro {

    private final List<Estacao> estacoes;
    private final List<Rota> rotas;
    private final List<Trem> trens;

    public Cadastro() {
        this.estacoes = new ArrayList();
        this.rotas = new ArrayList();
        this.trens = new ArrayList();
    }

    public void cadastrarEstacao(Scanner input) {
        boolean cnt = true;
        while (cnt) {
            System.out.print("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\nNome da estação: ");
            estacoes.add(new Estacao(input.next()));
            cnt = continuarCadastrando(input);
        }
    }

    public void listarEstaoes() {
        if (estacoes.size() == 0) System.out.println("Nâo tem nenhuma estação cadastrada!!!");
        for (Estacao estacao : estacoes) System.out.println(estacao);
    }

    public void cadastrarRota(Scanner input) {
        boolean cnt = true;
        while (cnt) {
            Rota rota = new Rota();
            System.out.print("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\nNome da rota: ");
            rota.setNome(input.next());
            System.out.print("Digite todas estações que compõem a essa rota\n");
            boolean cntEstacoes = true;
            while (cntEstacoes) {
                System.out.print("Estação: ");
                rota.getEstacoes().add(new Estacao(input.next()));
                System.out.print("Continuar digitando estações? [S/N] > ");
                if ("N".equalsIgnoreCase(input.next())) cntEstacoes = false;
            }
            rotas.add(rota);
            cnt = continuarCadastrando(input);
        }

    }

    public void listarRotas() {
        if (rotas.size() == 0) System.out.println("Nenhuma rota cadastrada!!!");
        for (Rota rota : rotas) System.out.println(rota);
    }

    public void cadastrarTrem(Scanner input) {
        boolean cnt = true;
        while (cnt) {
            System.out.print("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\nNome do trem: ");
            trens.add(new Trem(input.next()));
            cnt = continuarCadastrando(input);
        }
    }

    public void listarTrens() {
        if (trens.size() == 0) System.out.println("Nenhum trem cadastrado!!!");
        for (Trem trem : trens) System.out.println(trem);
    }

    private boolean continuarCadastrando(Scanner input) {
        System.out.print("Aperte qualquer tecla para continuar cadastrando ou [N] para sair > ");
        return !input.next().equalsIgnoreCase("N");
    }

}

Classes de modelo

@Data
@AllArgsConstructor
public class Trem {

    private String nome;

    @Override
    public String toString() {
        return "Trem = " + nome + '\'';
    }

}

@Data
@AllArgsConstructor
public class Estacao {

    private String nome;

    @Override
    public String toString() {
        return "Estacao nome='" + nome + '\'';
    }

}

@Data
public class Rota {

    private String nome;
    private List<Estacao> estacoes = new ArrayList();

    @Override
    public String toString() {
        return "Rota ='" + nome + '\'' + "\n  -> Estacões = " + estacoes;
    }

}