Como fazer tela de loading (splash screen) ?

Vou fazer um jogo e quero por uma splash screen no inicio com uma barra de progresso (ou algo assim), o que quero saber é como fazer o preenchimento da barra ser proporcional ao tempo de construção do JFrame principal e seus componentes. Como faço?

A ideia seria uma telinha pequena como a do netbeans.

Não tenho código feito ainda. :sweat_smile:

Vlw

Ola, Cria um dialog modal e seta undecorated=true. Ai é só personalizar ele. :wink:

O que vou fazer é criar um JPanel com setUndecorared(true), mas o que realmente quero saber é como fazer com que o progresso da barra de carregamento seja proporcional ao tempo que o programa leva pra construir o JFrame principal e seus componentes.

Suponhamos que eu instancie a classe principal (o JFrame principal no caso) e mais dois componentes dentro dele. O splash screen seria uma telinha que iria aparecer antes da tela principal ser visivel, de modo que quando terminar o carregamento da tela principal ele também termine de encher a barra.

Quero fazer isso para que não seja algo superficial e desnecessário, até porque o carregamento da barra de progresso mostraria o tempo que leva pra terminar todas as instanciações.

Vi algumas coisas parecidas, mas são muito superficiais e não mostram o andamento real. Eles só mostravam a barra enchendo mas independente da classe principal. Como se você deixasse algo no inicio só pra desviar a atenção do usuário enquanto ele instancia tudo. Já o carregamento que quero fazer mostraria o andamento das instanciações, nesse caso seria também possível ver a diferença de tempo, de máquina pra máquina, que leva pra terminar o carregamento.

Espero que me entenda, vlw de qualquer modo.

Infelizmente é isso ai. Nunca vi uma forma de calcular o carregamento das instanciações. Realmente demora pro sistema abrir a ponto de precisar exibir uma barra de carregamento? Se não, já é algo desnecessário, pois carregamento de classes não é algo que costuma demorar.

Neste caso, isto não é um processo demorado, uma splash aqui é só para enrolar. Se esta tela está demorando, alguma outra tarefa onerosa está acontecendo, talvez algum processo do banco…

Vc pode fazer uma progress referente a carregamento de arquivos, que é algo calculável. Uma consulta no banco pode demorar também, mas não é calculável então não rola progressbar.

Resumindo:
1 - Se está demorando, precisa descobrir oque está causando isso para ver se é calculável.
2 - Se não demora, não precisa de splash.
3 - Carregamento de classes não demora.
4 - Splash screen de um sistema que não tem um processo oneroso na abertura, só simulado.

Desde o java 1.6 existe a classe SplashScreen
Exemplo: https://docs.oracle.com/javase/tutorial/uiswing/misc/splashscreen.html

1 curtida

Você precisa quantificar os elementos a serem carregados, se não pode quantificar, só emulando em processos demorados, pois não faz sentido ter uma tela de carregamento que vai parecer um vírus tentando se esconder.
@Rodrigo_Void está mais do que certo.