2013-08-28 6 views
1

나는 자동으로 대화 상자를 닫는 방법에 대한 질문이 있습니다. 대화 상자를 닫을 필요없이 이벤트가 발생하면 사용자에게 경고하고 지연 후 자동으로 닫을 수 있습니다.자동으로 대화 상자 닫기

public class ShutdownComputer 
{ 
    public static void main(String[]args) 
    { 
     int wholeTimeBeforeShutdown=0; 

     int hour=0; 
     int minute=0; 
     int second=0; 

     try 
     { 
      String a=JOptionPane.showInputDialog(null,"HOUR","HOUR BEFORE SHUTDOWN",JOptionPane.QUESTION_MESSAGE); 
      String b=JOptionPane.showInputDialog(null,"MINUTE","MINUTE BEFORE SHUTDOWN",JOptionPane.QUESTION_MESSAGE); 
      String c=JOptionPane.showInputDialog(null,"SECOND","SECOND BEFORE SHUTDOWN",JOptionPane.QUESTION_MESSAGE); 

      if((a==null)||(a.equals(""))) 
      { 
       a="0"; 
      } 

      if((b==null)||(b.equals(""))) 
      { 
       b="0"; 
      } 

      if((c==null)||(c.equals(""))) 
      { 
       c="0"; 
      } 

      int e=Integer.parseInt(a); 
      int f=Integer.parseInt(b); 
      int g=Integer.parseInt(c); 

      wholeTimeBeforeShutdown=wholeTimeBeforeShutdown+((e*60)*60); 
      wholeTimeBeforeShutdown=wholeTimeBeforeShutdown+(f*60); 
      wholeTimeBeforeShutdown=wholeTimeBeforeShutdown+(g); 

      wholeTimeBeforeShutdown=wholeTimeBeforeShutdown*1000; 


      Thread.sleep(wholeTimeBeforeShutdown); 

      JOptionPane.showMessageDialog(null, "You only have less than 2 minutes left"); 

      Runtime.getRuntime().exec("shutdown -r -f -t 120"); 
     } 
     catch(Exception exception) 
     { 
      exception.printStackTrace(); 
     } 
    } 
} 

답변

0

아마 JOptionPane.setVisible (false)을 사용하면됩니다. 나는 그것을 시도하지 않았지만 http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html의 하단에있는 예제는 힌트를 줄 수 있습니다.

+0

영업 이익은위한 JOptionPane에 refference을 발견 할 수없고 (false)를 JOptionPane.setVisible, [대부분의 경우에 필요하며, 이전 시도에있다] (http://stackoverflow.com/a/18107432/714968), @로 kleopatra – mKorbel

1
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.concurrent.TimeUnit; 

import javax.swing.JDialog; 
import javax.swing.JOptionPane; 
import javax.swing.Timer; 

...이 코드에 의해 메시지가 시간 값을 내림 것입니다,하지만 난 당신을 위해 가능한 출발점 생각

final String msg="Shutdown\nWill happen automatically in "; 
    final JOptionPane op=new JOptionPane(null, JOptionPane.INFORMATION_MESSAGE); 
    final JDialog d=op.createDialog("Shutdown"); 
    d.setModal(true); 
    // deadline in three hours: 
    final long deadline=System.nanoTime()+TimeUnit.HOURS.toNanos(3); 
    ActionListener updater=new ActionListener() { 
     public void actionPerformed(ActionEvent e) 
     { 
     long left=deadline-System.nanoTime(); 
     if(left<=0) { 
      d.dispose(); 
      return; 
     } 
     String time; 
     long t=TimeUnit.NANOSECONDS.toHours(left); 
     if(t>0) time=t>1? t+" hours": "one hour"; 
     else { 
      t=TimeUnit.NANOSECONDS.toMinutes(left); 
      time=t>1? t+" minutes": "one minute"; 
     } 
     op.setMessage(msg+time); 
     } 
    }; 
    updater.actionPerformed(null);//update initial message 
    d.pack(); // resize dialog for the updated message 
    final Timer t=new Timer(1000, updater); 
    t.setInitialDelay(0); 
    t.setRepeats(true); 
    t.start(); 
    d.setVisible(true); 
    t.stop(); 
    // do your action 

참고.

+0

훌륭한 작품! JDialog x 버튼을 비활성화하거나 어떻게 x 버튼을 제거 할 수 있습니까? 코드를 시도했지만 x 버튼을 클릭하면 실행이 중지됩니다. 도와주세요. 고마워. –

+0

내 테스트에서 창 닫기 기호를 누르면 ok를 누르는 것과 같은 효과가 있습니다. 그러나'd.setDefaultCloseOperation (JDialog.DO_NOTHING_ON_CLOSE);을 호출하면 ✖를 완전히 금지해야합니다. 제공된 기본 조작 선택 사항 중 어느 것도 적합하지 않으면 windowClener에서 수행 할 작업을 결정하기 위해 WindowListener를 추가 할 수 있습니다. – Holger

+0

Altenatively'd.dispose();를 실행하여 모든 윈도우 컨트롤을 제거 할 수 있습니다. d.setUndecorated (true); Dialog 생성 직후에 d.getRootPane(). setBorder (BorderFactory.createEtchedBorder()); – Holger