前提
Screen2.javaクラスで定めたメンバ変数を、他のクラスCode.javaで数値の変更を行いたい
継承について理解しきれていない部分がある
###実現したいこと
Screen2.javaの変数iを、Screen2.java内のボタンbtn_Cを押してCode.javaを実行するたびに変更したい
(Code.javaでは、音声の再生および変数iの変更を行いたい)
初歩的な質問で恐縮ですが、ご教授いただければと思います。
よろしくお願い致します。
発生している問題・エラーメッセージ
実行すること自体は可能なのですが、
コンソールにこのようなメッセージが出てしまい、アプリケーション画面を開くことができません。
Exception in thread "main" java.lang.StackOverflowError at java.desktop/sun.awt.CGraphicsDevice.nativeGetScreenInsets(Native Method) at java.desktop/sun.awt.CGraphicsDevice.getScreenInsets(CGraphicsDevice.java:127) at java.desktop/sun.lwawt.macosx.LWCToolkit.getScreenInsets(LWCToolkit.java:498) at java.desktop/java.awt.Window.init(Window.java:519) at java.desktop/java.awt.Window.<init>(Window.java:550) at java.desktop/java.awt.Frame.<init>(Frame.java:426) at java.desktop/java.awt.Frame.<init>(Frame.java:391) at java.desktop/javax.swing.JFrame.<init>(JFrame.java:180) at screen.Screen2.<init>(Screen2.java:27) at screen.Code.<init>(Code.java:16) at screen.Screen2.<init>(Screen2.java:32) at screen.Code.<init>(Code.java:16) at screen.Screen2.<init>(Screen2.java:32)
at screen.Code.<init>(Code.java:16)
at screen.Screen2.<init>(Screen2.java:32)
が無数に繰り返してしまいます。
該当のソースコード
Screen2.java
package screen; import java.awt.Color; import java.awt.Font; import java.math.BigDecimal; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Screen2 extends JFrame{ int i = 1; public static void main(String args[]) { Screen2 frame = new Screen2(); frame.setVisible(true); } public Screen2() { setTitle("タイトル"); setSize(1450,900); setDefaultCloseOperation(EXIT_ON_CLOSE); JPanel p = new JPanel(); add(p); p.setLayout(null); //C JButton btn_C = new JButton("C"); btn_C.addActionListener(new Code()); btn_C.setBounds(300, 600, 100, 150); p.add(btn_C); } }
Code.java
package screen; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.Clip; import javax.sound.sampled.DataLine; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.UnsupportedAudioFileException;; public class Code extends Screen2 implements ActionListener{ Screen2 s = new Code(); public void actionPerformed(ActionEvent e){ Clip clip = null; AudioInputStream audioInputStream; try{ //音を鳴らす String cmdName = e.getActionCommand(); File soundFile = new File("/*音声ファイル*/"); audioInputStream = AudioSystem.getAudioInputStream(soundFile); AudioFormat audioFormat = audioInputStream.getFormat(); DataLine.Info info = new DataLine.Info(Clip.class, audioFormat); clip = (Clip)AudioSystem.getLine(info); clip.open(audioInputStream); clip.start(); //変数iの変更 s.i++; } catch (UnsupportedAudioFileException e1) { e1.printStackTrace(); } catch (LineUnavailableException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } }
回答3件
あなたの回答
tips
プレビュー