//cd c:\HPBasic\Toppage-sample3\MySwing\Slideshow100 //set CLASSPATH=. //javac Slideshow500.java //appletviewer Slideshow500.html //appletviewer Slideshow500.java import java.applet.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; /* */ public class Slideshow500 extends JApplet implements ActionListener, Runnable { Container contentPane; JButton startButton; JButton stopButton; AudioClip onceClip; SlidePanel500 slidepanel500; ImageIcon[] images; Thread t; int n = 7; //NUM_IMAGES String[] str={"コスモス(昭和記念公園 2003)","コスモス1","コスモス2", "コスモス3","コスモス4","コスモス5","コスモス6"}; String slideName = "kosmos"; String midiFile= "coroptica.mid"; public int i; public int height; public ImageIcon img; public String str2; public void init(){ contentPane = getContentPane(); JPanel minipanel= new JPanel(); startButton = new JButton("Start"); stopButton = new JButton("Stop"); startButton.addActionListener(this); stopButton.addActionListener(this); images = new ImageIcon[n]; for (int j = 0; j < n; j++) { String imageName = slideName + j + ".jpg"; try{images[j]=new ImageIcon(new URL(getCodeBase(),imageName)); } catch (Exception e) {} } Dimension d = getSize(); height = d.height; System.out.println("init height = " + height); contentPane.add(minipanel,BorderLayout.NORTH); minipanel.add(startButton); minipanel.add(stopButton); minipanel.setBackground(Color.green); slidepanel500=new SlidePanel500(); contentPane.add(slidepanel500,BorderLayout.CENTER); slidepanel500.setBackground(Color.yellow); } public void actionPerformed(ActionEvent event) { Object source = event.getSource(); if (source == startButton) { onceClip = getAudioClip(getCodeBase(),midiFile); onceClip.play(); //AudioPlay // スレッドを起動する t = new Thread(this); t.start(); } if (source == stopButton) { onceClip.stop(); //AudioStop stop(); } } public void run() { try { Thread mythread = Thread.currentThread(); i=0; while(t == mythread) { start(); Thread.sleep(3000); i++; if (i == n) i=0; } } catch (Exception e) { } } public void start() { System.out.println("start i = " + i); getheight(); geti(); getimg(i); getstr(i); System.out.println("start2 i = " + i); slidepanel500.init(); } public int getheight() { System.out.println("getheight height = " + height); return height; } public int geti() { System.out.println("geti i = " + i); return i; } public ImageIcon getimg(int i) { System.out.println("getimg i = " + i); img=images[i]; return img; } public String getstr(int i) { System.out.println("getstr str[i] = " + str[i]); return str[i]; } public void stop() { t=null; } } class SlidePanel500 extends JPanel { ImageIcon imgicon; String string; int height; int k; public void init() { Slideshow500 ss =new Slideshow500(); System.out.println("SlidePanel500"); k=ss.geti(); string=ss.getstr(k); height= ss.getheight(); System.out.println("SlidePanel500 init k= " + k + " string = " + string + " height = " + height); imgicon=ss.getimg(k); repaint(); } public void paintComponent(Graphics g) { System.out.println("paintComponent"); super.paintComponent(g); System.out.println("paintComponent" + " string = " + string + " height = " + height); g.setFont(new Font("Serif", Font.BOLD, 30)); g.setColor(Color.blue); g.drawString(string,220,height-50); // imgicon.paintIcon(this,g,50,30); } } /* 1 SlidePanelから、Slideshowのオブジェクト変数、str2,img,heightを呼び、表示させようとした。いずれもpublicとして「事なれり」と思ったら、これがだめ。 初期値しか呼べないようだ。 2 そこで、getimg,getstr,getheightとして、メソッドを使おうとしてもだめ。thread起動後、getimgなどを通らないためかと考え、startメソッドの中でも呼んだが、それでもだめだった。 3 heightにいたっては、initで600となるのに、getheightでは初期値の0。同じクラスの中で値が伝わらないのはなぜ? C:\HPBasic\Toppage-sample3\MySwing\Slideshow100>appletviewer Slideshow500.java init height = 600 start i = 0 getheight height = 600 geti i = 0 getimg i = 0 getstr str[i] = コスモス(昭和記念公園 2003) start2 i = 0 SlidePanel500 geti i = 0 getstr str[i] = コスモス(昭和記念公園 2003) getheight height = 0 SlidePanel500 init k= 0 string = コスモス(昭和記念公園 2003) height = 0 getimg i = 0 java.lang.NullPointerException at Slideshow500.getimg(Slideshow500.java:117) at SlidePanel500.init(Slideshow500.java:144) at Slideshow500.start(Slideshow500.java:102) at sun.applet.AppletPanel.run(AppletPanel.java:377) at java.lang.Thread.run(Thread.java:534) */