2017-10-27 5 views
0

私は2つの別々のクラスを持っています。 1つは魔法の8ボール、もう1つはInterstellarの曲を演奏するWavプレーヤーです。YesまたはNoボタン/ Joptionpaneに応じて、他のクラスを組み合わせたり呼び出す方法

import java.security.SecureRandom; 
import javax.swing.JOptionPane; 
import javax.swing.ImageIcon; 



public class Magic8Ball { 

private final static ImageIcon image = new ImageIcon("images/BuckminsterFuller.jpg"); 
private final static SecureRandom rand = new SecureRandom(); 
private final static String wisdom[] = { 
     "Not Synergistically feasible", 
     "It is geometrically analytical", 
     "Your question does not follow General Semantics, hazy, try again", 
     "Yes - Sustainable", 
     "No, energetically inefficient", 
     "Maybe a Dymaxion process. Technology not up to date.", 
     "Your question is negatively Entropic.", 
     "Everyone is born a genius, but the process of living de-geniuses them.", 
     "Humanity is acquiring all the right technology for all the wrong reasons.", 
     "We are called to be architects of the future, not its victims",}; 


public static void main(String[] args) { 

    boolean askQ = true; 

    while (askQ) { 
     String question = getUserQ(); 
     String randomWisdom = getRandomWisdom(); 

     showWisdom(question, randomWisdom); 

     askQ = userWantsToAskAnotherQ(); 
    } 


} 

private static String getUserQ() { 
    return JOptionPane.showInputDialog(null, 
      "Ask a question that has to do with the structural integrity of earth:", 
      "Only Engineers, Scientists and Architects allowed", 
      JOptionPane.INFORMATION_MESSAGE); 
} 

private static String getRandomWisdom() { 
    return wisdom[rand.nextInt(wisdom.length)]; 
} 

private static void showWisdom(String question, String randomWisdom) { 
    JOptionPane.showMessageDialog(null, question + "\n" + randomWisdom, 
      "Buckminster's Magic-8 Ball has responded.", 
      JOptionPane.PLAIN_MESSAGE, image); 
} 

private static boolean userWantsToAskAnotherQ() { 
    return 0 == JOptionPane.showConfirmDialog(null, "Abort Mission or Dock " 
      + "while Hearing" + "\n" + "No Time for Caution? by Hans Zimmer", 
      "Would you like to stay on spaceship earth or abandon ship?", 
      JOptionPane.YES_NO_OPTION, 0, image); 
} 

} 

あなたはクラスの終わりに見ることができるように、オプションはハンス・ジマーに注意のための時間を聞いていないしながら、ミッションやドックを中止することです。ユーザーが[はい当たるのであれば、どのように私はそれがアクティブ持っているか、恒星間の歌のために私が持っているこのクラスを呼び出すことができます。

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 
import javax.sound.sampled.Clip; 
import javax.sound.sampled.LineUnavailableException; 
import javax.sound.sampled.UnsupportedAudioFileException; 
import javax.swing.*; 
import java.io.*; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class WavPlayer extends JFrame { 
JButton btn = new JButton("Play No Time For Caution"); 
File wavFile; 
URL defaultSound; 
public static Clip clip; 
public static AudioInputStream audioInputStream; 

public WavPlayer(String url) { 
    try { 
     setSize(300, 100); 
     setLocation(400, 300); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     JPanel jp = new JPanel(); 
     defaultSound = new URL (url); 

     jp.add(btn); 

     getContentPane().add(jp); 
     pack(); 

     btn.addActionListener(new ActionListener() {    
      @Override 
      public void actionPerformed(ActionEvent e) { 
       play(); 
      } 
     }); 
    } catch (MalformedURLException ex) { 
     Logger.getLogger(WavPlayer.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

public void play() { 
    try { 
     audioInputStream = AudioSystem.getAudioInputStream(defaultSound); 

     try { 
      clip = AudioSystem.getClip(); 
      clip.open(audioInputStream); 
      clip.loop(20000); 
      clip.start(); 

     } catch (LineUnavailableException e) { 
     } 

    } catch (UnsupportedAudioFileException | IOException e) { 
    } 
} 

public void stop() { 
    clip.stop(); 
} 

public static void main(String args[]) { 
    WavPlayer t = new WavPlayer("file:C:/Users/borjax01/Desktop/Netbeans/JavaApplication/music/Interstellar.wav"); 
    t.setVisible(true); 

} 
} 

編集:私はすでに、他に1つのクラスをリファクタリングして移動することにより、これら2つのクラスを組み合わせました。私がやりたいことは、8ballクラスの最後にWavPlayerクラスを呼びたいときに、ユーザーが再びプレイするように指示され、wavplayerクラスをアクティブにするために「yes」とヒットしたときです。

答えて

0

何かエラーがありましたか? "内部クラスは静的宣言を持つことはできません"と思われますか?

別のアプローチを試すこともできます。 wavプレーヤークラスを入れ子にする代わりに、Magic8Ballクラスの後にifを挿入します。どちらのクラスも同じファイルに存在することができますが、わかっているように、それらのうちの1つだけが公開されている可能性があります。

+0

[OK]を、ので、それを行うために、私は公共のクラスWavPlayerから単語「パブリック」を削除は、JFrameのを拡張しますか? –

+0

実際には、右クリックして結合する方法を学びました。しかし、今私はこれを実行すると、 "どのクラスを実行したいですか?8ボールまたはWavplayer"と言うだけです。私が8ボールにしたいのは、ユーザーがゲームの最後に「はい」を選択したときにWavplayerを呼び出すことです。 –

+0

JOptionPane.showConfirmDialogを呼び出すと、押されたボタンに一致する整数が返されます。あなたはこのようなものを試してみるかもしれません: – HankNessip

0

今、両方のクラスが存在していることをあなたはこのような何か試してみてください:

value = JOptionPane.showConfirmDialog(...) 
if (value == JOptionPane.YES_OPTION) { 
    WavPlayer t = new WavPlayer("file:C:/Users/borjax01/Desktop/Netbeans/JavaApplication/music/Interstellar.wav"); 
    t.setVisible(true); 
} 
+0

私はあなたがそれを書いたのとまったく同じようにコピー&ペーストしないことを知っています。だから、私はあなたのコードで書いたものに続いて、0 ===を返すような、私のコードで何を持っているのかということで、 "value"という言葉を置き換えますか? –

関連する問題