2012-12-29 2 views
0

Привет Я кодирую приложение для сигнализации. У меня есть класс snooze, который вызывается при звуке будильника. Раньше он работал отлично, прежде чем использовать JMF. Но после использования JMF я вижу только внешний фрейм моего пользовательского интерфейса.Я не могу видеть компоненты внутри своего кадра

Я пробовал начать новую тему для класса, но получил тот же результат. Я вставляю здесь код классов, в которых, я думаю, проблема.

Пожалуйста, помогите мне решить проблему.

* IsTime класс. Который проверяет, является ли время звуковой сигнализацией. *

package alarm; 
import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class IsTime { 
int hrs; 
int min; 
int sec; 
GregorianCalendar clk=new GregorianCalendar(); 
Calendar gtl= Calendar.getInstance(); 
    mp3 mix=new mp3(); 
public void makeReady(int h,int m,int s,String ampm){ 
    Calendar c1=Calendar.getInstance(); 
    c1.set(Calendar.HOUR_OF_DAY,h); 
    c1.set(Calendar.MINUTE, m); 
    c1.set(Calendar.SECOND,s); 
    if("PM".equals(ampm)){ 
     c1.set(Calendar.AM_PM, Calendar.PM); 
     if(Calendar.getInstance().get(Calendar.AM_PM)==Calendar.PM){ 
      System.out.println("now is pm"); 
      if(c1.after(Calendar.getInstance())){ 
       check(c1); 
      } 
      c1.set(Calendar.DAY_OF_YEAR,c1.get(Calendar.DAY_OF_YEAR)+1); 
      check(c1); 
     } 
    } 
    if(Calendar.getInstance().get(Calendar.AM_PM)==Calendar.AM){ 
      System.out.println("now is am"); 
      if(c1.after(Calendar.getInstance())){ 
       check(c1); 
      } 
      c1.set(Calendar.DAY_OF_YEAR,c1.get(Calendar.DAY_OF_YEAR)+1); 
      check(c1); 
     } 
    if(Calendar.getInstance().get(Calendar.AM_PM)==Calendar.PM){ 
     c1.set(Calendar.DAY_OF_YEAR,c1.get(Calendar.DAY_OF_YEAR)+1); 
     check(c1); 
    } 
} 
public void check(Calendar ch){ 
     System.out.println("got to check"); 
     System.out.println(Calendar.getInstance().get(Calendar.HOUR_OF_DAY)); 
     System.out.println(ch.get(Calendar.HOUR_OF_DAY)); 
     while(!(Calendar.getInstance().after(ch))){ 
     } 
    Snooze snz=new Snooze(); 
      snz.start(); 
      mix.start(); 
    } 
public void makeReady(int mis){ 
     Calendar sz=Calendar.getInstance(); 
     sz.set(Calendar.SECOND, 0); 
     sz.set(Calendar.MINUTE, Calendar.getInstance().get(Calendar.MINUTE)+mis); 
     check(sz); 
    } 
    } 

* класс медиа, который играет песню, когда пришло время *

 package alarm; 
import java.awt.Button; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.media.*; 
import java.io.*; 
import java.net.URL; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 

class mp3 extends Thread 
{ 
private URL url; 
private MediaLocator mediaLocator; 
private Player playMP3; 
static String mp3; 
static String mp4; 
public mp3() 
{ 
try{ 
    System.out.println(System.getProperty("os.name")); 
    System.out.println("before"+mp3); 
    if(System.getProperty("os.name").equals("Linux")){ 
     mp4="file://".concat(mp3); 
    } 
    else{ 
    mp4="file:///".concat(mp3); 
    } 
    System.out.println(mp4); 
    this.url = new URL(mp4); 
    }catch(java.net.MalformedURLException e) 
     {System.out.println(e.getMessage());} 
} 
public void run() 
{ 
try{ 
    System.out.println(url); 
    mediaLocator = new MediaLocator(url);  
    playMP3 = Manager.createPlayer(mediaLocator); 
    }catch(java.io.IOException e) 
     {System.out.println(e.getMessage()); 
    }catch(javax.media.NoPlayerException e) 
     {System.out.println(e.getMessage());} 
playMP3.addControllerListener(new ControllerListener() 
    { 
    public void controllerUpdate(ControllerEvent e) 
    { 
    if (e instanceof EndOfMediaEvent) 
     { 
     playMP3.stop(); 
     playMP3.close(); 
     } 
    } 
    } 
); 
playMP3.realize(); 
playMP3.start(); 
} 
} 

* Snooze класс, где реальная проблема *

 package alarm; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
public class Snooze extends Thread implements ActionListener{ 
    JFrame sozef=new JFrame("Snooze"); 
    JLabel tl=new JLabel("After"); 
    JLabel ml=new JLabel("mins"); 
    JComboBox tiec=new JComboBox(); 
    JButton soo=new JButton("Snooze"); 
    JButton stp=new JButton("Stop"); 
     mp3 mi=new mp3(); 
     Snooze sz; 
     public void run(){ 
      sozef.setSize(500,700); 
     sozef.setLayout(null); 
     tl.setBounds(50,50,50,50); 
     tiec.setBounds(50,90,50,30); 
     ml.setBounds(120,90,50,50); 
     soo.setBounds(50,130,90,30); 
     stp.setBounds(50, 170, 90, 30); 
     JcAdd(tiec); 
     sozef.add(tl); 
     sozef.add(tiec); 
     sozef.add(ml); 
     sozef.add(soo); 
     sozef.add(stp); 
     soo.addActionListener(this); 
     sozef.setVisible(true); 
     sozef.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     } 
    void JcAdd(JComboBox jc){ 
     for(int i=0;i<=10;i++) 
      jc.addItem(Integer.toString(i)); 
    } 
    public void actionPerformed(ActionEvent arg0) { 
     if(arg0.getSource()==soo){ 
     int ma=Integer.parseInt(tiec.getSelectedItem().toString()); 
     mi.stop(); 
     IsTime sz=new IsTime(); 
     sz.makeReady(ma); 
     } 
     mi.stop(); 
    } 
} ![this is the frame I see when the snooze is being called][1] 
+0

'setLayout (null);' Мне не нужно видеть больше, чем это, чтобы реализовать это приложение. имеет серьезные проблемы. Используйте макеты с заполнением и границами, для гораздо лучшего поведения GUI. Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –

+0

Но г-н Эндрю Томпсон этот графический интерфейс работал независимо, это в сочетании медиа-кода. Я думаю, что у него возникла проблема. –

ответ

1

Это не правильный способ осуществления задержки:

while(!(Calendar.getInstance().after(ch))){ 
} 

Фактически, это вызовет серьезные проблемы.

Попробуйте вычислить количество миллисекунд между вашей целевой датой и текущим временем и передав это значение Thread.sleep. Вам понравятся поклонники вашего компьютера. И вполне может случиться так, что ваш цикл занят голодом из потока событий AWT, тем самым предотвращая показ вашего кадра.

+0

Спасибо за совет. Я понял проблему с заявлением. Я попробую Thread.sleep и опубликовать сообщение о том, что произошло –

Смежные вопросы