Java, programação iniciantes - Problema com loop

Estou tentando fazer um programa no dr java, estou bem no início, mas o exercício pede: "leia um número determinado de dados(Número do canal(4,5,7 e 12) e a porcentagem de pessoas que olham cada um). O comando zero deve finalizar a operação.
Sei que faltou os print mas no loop está travando.

public class Lista3_17{
public static void main (String args[]){
int status, canal, c4,c5,c7,c12;

c4=0; c7=0; c12=0; c5=0;
status=Entrada.leiaInt("A Tv está 1- ligada ou 2-desligada");
if(status==1){
  canal=Entrada.leiaInt("Qual canal deseja assistir 4,5,7 e 12");
  while (canal!=0){
    if(canal==4){
      c4=c4+1;
    }
    if(canal==5){
      c5=c5+1;
    }
    if(canal==7){
      c7=c7+1;
    }
    if(canal==12){
      c12=c12+1;
    }
  }     
  if(canal!=4 || canal!=5 || canal!=7 || canal!=12){
    System.out.println("Você digitou um canal inválido, tente novamente");
    canal=Entrada.leiaInt("Qual canal deseja assistir 4,5,7, 12 ou 0- para desligar");
  }
  if(canal==0){
    System.out.println("A Tv foi desligada");
    }
}
if (status==2){
  System.out.println("A Tv encontra-se desligada");
}

}
}

1º O travamento ocorre pois seu while está sendo finalizando na chave anterior ao if acima. Desta forma, a variável canal nunca é alterada.
Mova está chave para antes de

2º Outro detalhe, esta validação está incorreta.

o correto é if(canal != 4 && canal != 5 && canal != 7 && canal != 12)

    int status = Entrada.leiaInt("A Tv está 1- ligada ou 2-desligada");
    if (status == 1) {
        while (true) {
            int canal = Entrada.leiaInt("Qual canal deseja assistir 4,5,7 e 12 ou 0- para desligar");
            if (canal == 4) {
                c4 = c4 + 1;
            }
            if (canal == 5) {
                c5 = c5 + 1;
            }
            if (canal == 7) {
                c7 = c7 + 1;
            }
            if (canal == 12) {
                c12 = c12 + 1;
            }

            if (canal != 4 && canal != 5 && canal != 7 && canal != 12) {
                System.out.println("Você digitou um canal inválido, tente novamente");
            }
            if (canal == 0) {
                System.out.println("A Tv foi desligada");
                break;
            }
        }
    }
    
    if (status == 2) {
        System.out.println("A Tv encontra-se desligada");
    }

Fiz alguns ajustes e fiz o exercício funcionar. Tente entender como foi feito, qualquer dúvida pode chamar.

Show acho que agora funcionou
Coloquei alguns prints para saber a quantidade de pessoas em um canal e porcentagem de telespectadores(tipo um ibope).

public class Lista3_17{
public static void main (String args[]){
int status, canal, c4,c5,c7,c12,ct;

c4=0; c7=0; c12=0; c5=0; ct=0;
status = Entrada.leiaInt("A Tv está 1- ligada ou 2-desligada");
if (status == 1) {
    while (true) {
        canal = Entrada.leiaInt("Qual canal deseja assistir 4,5,7 e 12 ou 0- para desligar");
        if (canal == 4) {
            c4 = c4 + 1;
        }
        if (canal == 5) {
            c5 = c5 + 1;
        }
        if (canal == 7) {
            c7 = c7 + 1;
        }
        if (canal == 12) {
            c12 = c12 + 1;
        }
        ct=c4+c5+c7+c12;
        
        if (canal != 4 && canal != 5 && canal != 7 && canal != 12) {
            System.out.println("Você digitou um canal inválido, tente novamente");
        }
        if (canal == 0) {
            System.out.println("A Tv foi desligada");
            break;
        }
    }
}

if (status == 2) {
    System.out.println("A Tv encontra-se desligada");
}
System.out.printf("A quantidade de pessoas que olham o canal 4 é "+c4+" e a porcentagem de telespectadores "+(c4/ct));
System.out.printf("A quantidade de pessoas que olham o canal 5 é "+c5+" e a porcentagem de telespectadores "+(c5/ct));
System.out.printf("A quantidade de pessoas que olham o canal 7 é "+c7+" e a porcentagem de telespectadores "+(c7/ct));                  
System.out.printf("A quantidade de pessoas que olham o canal 12 é "+c12+" e a porcentagem de telespectadores "+(c12/ct));

}
}