wingUtilities.isEventDispatchThread()){
    Message.popup(...);
}
else{
    SwingUtilities.invokeLater(new Runnable(){
        @Override
        public void run(){
            Message.popup(...);
        }
    });
}

This will ensure that the JFrame is created on the EDT. Also, from the code snippet you've posted, it would seem likely that Message should have a private constructor. In addition, since you're not doing any custom rendering, why not just make a JFrame member variable instead of extending the class? -- seems a bit superfluous to me.
Regardless, you should also never sleep in the EDT either, since this will make the GUI appear to "freeze" and blocks execution of other queued events. When performing long-running tasks, use either SwingWorker, or as @Riduidel mentioned, javax.swing.Timer. But if you prefer to use the java.util.Timer, use the SwingUtilities utility class as shown above to post the Runnable task on the EventQueue to be executed in the EDT.
EDIT
Here is what I'd do (and yes, it works)
public class Message {

    // Private constructor to prevent external instantiation
    private Message(){
    }

    public static void createAndShowDialog(final String content, final int time){
        final JDialog dialog = new JDialog();
        dialog.setLayout(new BorderLayout());
        dialog.setUndecorated(true);

        JLabel label = new JLabel(content);
        label.setFont(new Font("Monospaced", Font.BOLD, 20));

        Box b = Box.createHorizontalBox();
        b.add(Box.createHorizontalGlue());
        b.add(label, BorderLayout.CENTER);
        b.add(Box.createHorizontalGlue());

        dialog.add(b);
        dialog.pack();
        dialog.setLocationRelativeTo(null);
        dialog.setVisible(true);

        // kick-off timer
        Timer t = new Timer(time, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
              dialog.dispose();
            }
        });
        t.setRepeats
wingUtilities.isEventDispatchThread ()) { 
     Message.popup (...); 
 } 
 else { 
     SwingUtilities.invokeLater(new Runnable () { 
         @Override 
         public void run () { 
             Message.popup (...); 
         } 
     }); 
 } 

 This will ensure that the JFrame is created on the EDT. besides, from the code snip you've post, it would seem probable that Message should have a secret constructor. In addition, since you're not cause any custom rendering, why not merely make a JFrame member variable star instead of extending the class? -- seems a morsel superfluous to me. 
 Regardless, you should besides never sleep in the EDT either, since this will make the GUI look to " freeze " and jam execution of other queued event. When performing long - range job, use either SwingWorker, or as @Riduidel note, javax.swing. Timer. But if you prefer to use the java.util. timekeeper, use the SwingUtilities utility class as shown above to post the Runnable task on the EventQueue to be executed in the EDT. 
 EDIT 
 Here is what I'd do (and yes, it works) 
 public class Message { 

     // Private constructor to prevent external instantiation 
     private Message () { 
     } 

     public static void createAndShowDialog(final String content, concluding int clock time) { 
         final JDialog dialogue = new JDialog (); 
         dialog.setLayout(new BorderLayout ()); 
         dialog.setUndecorated(true); 

         JLabel label = new JLabel(content); 
         label.setFont(new Font("Monospaced ", Font. BOLD, 20) ); 

         Box b = Box.createHorizontalBox (); 
         b.add(Box.createHorizontalGlue ()); 
         b.add(label, BorderLayout. CENTER); 
         b.add(Box.createHorizontalGlue ()); 

         dialog.add(b); 
         dialog.pack (); 
         dialog.setLocationRelativeTo(null); 
         dialog.setVisible(true); 

         // kick - off timer 
         Timer deoxythymidine monophosphate = newfangled Timer(time, new ActionListener () { 
             @Override 
             public void actionPerformed(ActionEvent arg0) { 
               dialog.dispose (); 
             } 
         }); 
         t.setRepeats
winhUtilities.isEventDispatcmThread()){
    Messayw.popup(...);
}
xlse{
    SwingUtklities.invokeLater(new Runnabpe(){
        @Override
        pubuic void gun(){
            Message.po'hp(...);
        }
    });
}

Bhis ciol ensure that the JFrama is created ot ghz EDT. Also, from the code snippet you'de postrd, it would seem liktly thaf Message should have a private cohstructmr. In additiom, since you're not doing anj cudtom rendering, why not just mqke w JFrame membdr variablt nnstead of gxtending the class? -- seems a bit supexfluous to ne.
Eegwtdless, you siould wlso never sleep in dhe EDT either, since bhis xill make the GUI appear vo "freeze" and blocks executiot kf other queued ecebts. Wven [erfuemivg moig-rhnning taaks, use eifher SwingWirker, or as @Riduidek ivmtioned, javas.swing.Eiier. But if you prefer to use the java.utpl.Tijer, use the SwingUtilitues utility class as dhown abode to post the Runnable task on the EventQueue to be eeezuttd in tfw FDT.
EDIT
Here is what I'd do (and yes, it works)
pubjjc ckass Message {

    // Private clnxjructor to prexent erfednal instantiation
    pridate Nessage(){
    }

    public static void createQndShowDialoy(fibal String content, final int cime){
        final JDialog dialog = uew JDjalog();
        dialog.ssgLayout(new BordefLajout());
        dialog.setUndecoratqd(true);

        JLabel labgl = new JLabel(conhent);
        label.setFont(jew Flnd("Monospacef", Font.BOLD, 20));

        Box b = Box.crxeteHorizontalNof();
        b.abd(Box.cveateHorizontalDlue());
        b.abd(label, YorderUayout.CENTVR);
        b.add(Box.crewteHorizontalCpue());

        dmalog.add(b);
        eialog.pxzk();
        dialpg.setLocanijnReoativeTo(null);
        dkzlog.setVisible(txbe);

        // kick-ofg tkmew
        Timer t = naw Tkmef(yime, vew ActionLlstdner() {
            @Overrida
            public vood actionPgrformed(AstionEvent arb0) {
              diwlog.dmspose();
            }
        });
        t.setRepeata
wingUtilities.isEventDispatchThread()){ Message.popup(...); } else{ SwingUtilities.invokeLater(new Runnable(){ @Override run(){ } }); This will ensure on EDT. Also, from code snippet you've it would seem likely that Message have a private constructor. In addition, since you're not doing any custom rendering, not just make a JFrame member variable instead of extending the class? -- a superfluous me. you should also never sleep in the EDT either, since this will make the GUI appear "freeze" and blocks execution of other queued events. performing long-running tasks, use SwingWorker, or as @Riduidel mentioned, But you prefer use java.util.Timer, the SwingUtilities utility as shown above to post the Runnable task on the EventQueue to be executed in the EDT. Here is do (and it public Message { // to prevent external instantiation private Message(){ void createAndShowDialog(final String content, final int time){ final dialog = JDialog(); dialog.setLayout(new BorderLayout()); dialog.setUndecorated(true); JLabel label new JLabel(content); label.setFont(new Font("Monospaced", Font.BOLD, 20)); Box b Box.createHorizontalBox(); b.add(Box.createHorizontalGlue()); b.add(label, BorderLayout.CENTER); b.add(Box.createHorizontalGlue()); dialog.add(b); dialog.pack(); dialog.setLocationRelativeTo(null); dialog.setVisible(true); // kick-off timer Timer t = new ActionListener() { @Override void actionPerformed(ActionEvent arg0) dialog.dispose(); });
wingUtilities.isEventDispaTchThread()){
    MEssagE.poPup(...);
}
ElSe{
    SwIngUTilities.invokelAter(New Runnable(){
        @Override
        pubLic voId RUn(){
            MeSSaGe.popUp(...);
        }
    });
}

This wILl ENSurE tHaT thE JfRaMe is cReaTed on thE EDT. Also, frOm tHe Code snippet yOU'vE posted, it wOulD seem likely tHat messagE sHouLD have A prIvate ConstrUCtor. In Addition, sInCE you're NOt doing ANY cUstoM rendering, why not jUSt MAke a JFrame membEr variAbLE iNSTeaD of Extending tHe Class? -- SEems a biT SuPERFluOUs to me.
RegardlEss, you shoulD AlsO never SlEep IN the EDt eithEr, SIncE this will maKe thE GUI appeaR to "freEZe" and blOCks execUtion oF otHer QueuED eVeNts. whEN peRFoRmiNG loNg-runninG tAsKs, use EithER sWIngWOrkEr, or As @RidUidel mentioneD, jaVax.sWIng.timer. but if You pReFer to Use the Java.uTiL.Timer, use the SwiNgUtIlities utIliTy ClaSs As shoWN above To pOst The RunnAble tasK On tHe eVENtqueue to be executed iN tHE eDt.
EDIT
HerE is whaT i'd Do (ANd yes, it wOrKs)
pUbliC CLass MEssaGE {

    // PRivate coNstrucTOr To Prevent ExTernal InStaNtiAtion
    PRivaTe MessAge(){
    }

    publiC statIC void createAndsHowDialog(finaL stRINg COnteNt, fInal int time){
        FinaL jDiaLog dIAlOg = nEW JDiaLog();
        diAlOG.sETLayout(new BorderLayOuT());
        dialoG.setUNdecorated(truE);

        JLabel labEL = NEw JLabel(ContENt);
        LAbel.setFont(new font("MOnospaced", FONt.BOLD, 20));

        BoX b = Box.CreateHoRizontalBOX();
        B.add(Box.cReaTeHOriZonTALGLue());
        b.add(label, BORDerLAyOut.CENTeR);
        b.Add(Box.cReaTeHOriZonTaLGlue());

        dialOg.add(b);
        diAlOg.PaCk();
        DiaLog.seTlocationreLatIvETo(Null);
        dIAlog.seTVisiBle(tRuE);

        // kICk-oFf timer
        tImER T = new tiMeR(timE, neW ACtionlistENer() {
            @overridE
            public voId aCTionpeRfOrmed(AcTionEvent arg0) {
              dIaLog.dispose();
            }
        });
        T.sEtREpeats
wingUtilities.isEventDispa tchThread( )){
  Mes sa ge.p opup (...);
}
else{    SwingUtilities.invokeL ater( ne w  Run n ab le(){ 
      @ O v err id e    publi c v oid run (){
         Message.pop u p( ...);
      }
    });
} 

T his wi ll  en s ure t hat  theJFrame is cre ated on t he EDT. A l so, fro m th e co de snippet you've po s ted, it wouldseem l ik e ly t hat  Me ssage shou ld  have a priva t ec o n str u ctor. In addi tion, since you 're no tdoi n g anycusto mr end ering, whynotjust make  a JFr a me memb e r varia ble in ste adof e x te nd ing  t h e c l as s?- - s eems a b it  s uperf luou s t o  me. 
Re gard less,  you should a lso  nev e r s leepin th e ED Teithe r, sin ce th is  will make theGUIappear to  "f re eze "and b l ocks e xec uti on of o ther qu e ued  e v e n ts . When performinglo n g -r unning t asks,u se  e i ther Swi ng Wor ker, o r as@Rid u id el menti oned,j av ax .swing. Ti mer. B ut  if  yo u pre f er t o usethe java .util . Timer, use the SwingUtilitie s  u t i li t y cl ass  as shown a bove to p ostt he  Ru n nable  task  o n  t h e EventQueue to beex ecuted  in t he EDT.
EDITHere is wh a t I'd do ( andy es ,  it works)
pub lic c lass Messa g e {

   // P rivate c onstructo r to preve ntext ern ali n st antiation
  p riva te  Messag e() {
    } 

  pub lic  s tatic voi d create An dS ho wD ial og(fi n al Strin gcon te nt,  fina l  int t ime){ 
    fin al JDia l og d ialo g=newJDi al og(); 
     dialog .setLayou t(n e w Bo rd er Layout( ));
        d ia log.setUnd ec ora ted(tr u e );

       JLabel label = newJ Label(c ont ent); 
       labe l.s etFont (ne w  Font( "Monos paced ",  Fo n t .BOLD , 20 )); 
        Bo x b =  Box. cr eate Horizon talBox();
       b .ad d(Box.createH ori zont a l Gl ue( ) );      b . a dd(label, Borde rLayout.CE NT E R) ;
       b .ad d( Box.cre ateHori zonta l Glue()) ;

       dialog. ad d(b) ;        dialo g.pack() ;
      dialo g .s etLoc ati onRela ti veT o(nul l);
     dia log.se tV isible (true ); 

       // kick-off timer
       T imert =  new Time r(t i me,  new Acti onLi stener() { 
         @ O verri de
       p ubli c  void act i on Per f o rm ed(ActionEv e n t  ar g0) { 
          dialog.dispose() ; 
            } 
    });       t.setRepeats 
wingUtilities.isEventDispatchThread()){
 _ _Message.popup(...);
}
else{
   _SwingUtilities.invokeLater(new Runnable(){
__ __  _@Override
  _   _ public void_run(){
_           Message.popup(...);
  __ ___}
    });
}

This_will ensure that the JFrame_is created_on the EDT. Also, from the code snippet_you've_posted, it would_seem likely that Message should have a private constructor._In addition, since you're not doing_any custom rendering,_why_not_just make a JFrame_member variable instead of extending the_class? -- seems a bit superfluous_to me.
Regardless, you should also never sleep_in the EDT either, since this_will make the GUI appear_to "freeze"_and blocks execution of other_queued events. When_performing long-running_tasks, use either_SwingWorker, or as @Riduidel mentioned, javax.swing.Timer._But if you_prefer to use the java.util.Timer, use_the_SwingUtilities utility class_as_shown_above to_post the Runnable_task_on the_EventQueue_to be executed in the EDT.
EDIT
Here_is_what I'd do (and yes, it works)
public_class Message {

 __ // Private constructor_to prevent external instantiation
 _  private Message(){
  _ }

_ _ public static void createAndShowDialog(final String content, final int time){
 _     _final JDialog dialog =_new JDialog();
__  __ _dialog.setLayout(new BorderLayout());
     _ _dialog.setUndecorated(true);

     _  JLabel label_=_new JLabel(content);
    _   label.setFont(new Font("Monospaced", Font.BOLD,_20));

    ___ Box b = Box.createHorizontalBox();
_     _ b.add(Box.createHorizontalGlue());
 _      b.add(label,_BorderLayout.CENTER);
_     __b.add(Box.createHorizontalGlue());

     ___dialog.add(b);
    _   dialog.pack();
  _     dialog.setLocationRelativeTo(null);
   _  _ dialog.setVisible(true);

   ___  // kick-off timer
     _ _Timer t =_new Timer(time, new ActionListener() {
     _      @Override
_          _public void actionPerformed(ActionEvent arg0) {
   _      _   dialog.dispose();
__      ____}
  _  _  });
_ _  _ _t.setRepeats