НЕ ИСПОЛЬЗУЙТЕ WHILE LOOP в начале сценария, так как условие ниже приведет к выходу из сценария и сломает цикл.
echo "Not a good time to transcode video!" && exit 0
Вы можете попробовать захватить выходной сигнал, чтобы при выходе сценария он перезапускает
##########################################################################
## CHECK TIME
############bash##############################################################
trap '<path to script> ' EXIT
time=$(date +%k%M)
if [[ "$time" -ge 1800 ]] && [[ "$time" -le 2200 ]];then
echo "Not a good time to transcode video!" && exit 0
sleep 1;
else
echo "Excellent time to transcode video!" && echo "Lets get started!"
sleep 1;
fi
##########################################################################
## CHECK TIME
##########################################################################
echo 1
echo 2
echo 3
echo 4
echo 5
startover
Примечание. Я добавляю спать 1 секунду, потому что это даст вам время для просмотра сообщения. ловушка выходного сигнала и повторный запуск скрипта действует как цикл while. Я также предполагаю, что эти коды находятся в скрипте.
Вы не должны пытаться рисовать / перекрашивать вещи до того, как рамка станет видимой.
Что вы можете сделать, это удалить содержимое конструктора GamePanel
и поместить его в отдельный метод, например:
public void startThread() {
Thread t = new Thread(this);
t.start();
}
Затем запустить поток после того, как фрейм станет видимым: 116]
frame.setVisible(true);
gamePanel.startThread();
Еще лучше, избавьтесь от нити внутри панели и создайте ее в своей главной:
frame.setVisible(true);
new Thread(gamePanel).start();