Java Swing JFrame overshadowing the other Jframe while running -


so new in swing , working on hangman game. way supposed work user prompt welcome message last 3seconds, disappears, , sends user next frame. working except when run first frame still visible , running in shadow though goes next one. have tried use dispose method it's closing frame without going next one. here have done far

import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.*; import javax.swing.timer;  public class pa1test extends jframe{  public static void main(string[] args) {      // opens first page     jframe gui = new jframe("hangman");     gui.setdefaultcloseoperation(jframe.exit_on_close);     gui.add(new first_pageimage());     gui.pack();     gui.setvisible(true);     // action open second page         actionlistener taskperformer = new actionlistener() {         @override         public void actionperformed(actionevent evt) {             //...perform task...             jframe secpage = new jframe("hangman");             secpage.setdefaultcloseoperation(jframe.exit_on_close);             secpage.add(new secondpage());             secpage.pack();             secpage.setvisible(true);         }     };      // set timer perform action after 3 seconds     timer timer = new timer(3000 ,taskperformer);     timer.setrepeats(false);     timer.start();       } 

}

a few points:

  1. setting dispose operation jframe.exit_on_close exit entire application. consider using jframe.dispose_on_close
  2. sounds wish create splash screen - consider reading oracle's tutorial on using splashscreen class
  3. if intent splash screen , wish use jframe or jdialog rather java's build in splashscreen (2), consider designing splash screen removing decorations (setundecorated(true)) , centering (setlocationrelativeto(null);)
  4. in order dispose/hide initial jframe/splash, need after timer has fired, can done within timer's actionlistener implementation - in order access splash screen instance within anonymous class, must mark final.

pseudo-code:

final jframe splashscreen = new jframe("hangman");//mark final visibility's sake splashscreen.setdefaultcloseoperation(jframe.dispose_on_close);  actionlistener taskperformer = new actionlistener() {     @override     public void actionperformed(actionevent evt) {         //logic create main ui frame here         splashscreen.dispose();     } };  // set timer perform action after 3 seconds timer timer = new timer(3000 ,taskperformer); timer.setrepeats(false); timer.start(); 

Comments