Porque esse applet não roda?

Peguei um exemplo do livro Java como programar 4 edição e ele não roda, não achei o porque (provavelmente copiei errado o sono ta grande) , alguem poderia me ajudar estou usando o Windows2000 talvez possa ser isso.


import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.regex.Matcher;
import java.awt.Color;


import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.JCheckBox;
import javax.swing.SwingUtilities;

public class RandomCharacters extends JApplet implements ActionListener
{
	
	private String strAlfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	private final int SIZE = 3;
	
	//Vetor com componentes
	private JLabel labels[];
	private JCheckBox chks[];
	
	private Thread threads[];
	private boolean suspended[];
	
	
	
	public void init()
	{
		//define arrays com componentes
		labels = new JLabel[SIZE];
		chks = new JCheckBox[SIZE];
		threads = new Thread[SIZE];
		suspended = new boolean[SIZE];
		
		//define layout
		getContentPane().setLayout(new GridLayout(SIZE,2,5,5));
		
		//cria componentes, adiciona no painel de conteudo, registra tratador de evento		
		for (int i = 0; i < SIZE; i++){
			labels[i] = new JLabel();
			labels[i].setBackground(Color.green);
			labels[i].setOpaque(true);
			getContentPane().add(labels[i]);
			chks[i] = new JCheckBox ( "Suspended");
			chks[i].addActionListener(this);
		}
						
	}//Fim do método init
	
	
	public void start()
	{
		
		//Criar threads
		for (int i = 0 ; i < threads.length ; i++){
			
			//Cria thread atribuindo um objeto da classe que implementa runnable
			
			//Inicia thread
				
		}		
		
		
	}///Dim do método start
	
	
	
	private int getIndex(Thread currentThread)
	{
		
		//Procura no array de threads a posição da thread que foi passada 
		for (int i = 0 ; i < threads.length; i++)
			
			//Caso encontre a thread retorna o índice do array onde ela está 
			if (threads[i] == currentThread)
				return i;
		
		
		//Caso não encontre retornar -1
		return -1;
		
	}
	
	
	public synchronized void stop()
	{
		for (int i = 0 ; i < threads.length ; i++)
			threads[i] = null;
		
		notifyAll();
	}
	
	public synchronized void actionPerformed (ActionEvent evento)
	{
		
		for (int i=0; i < chks.length; i++){
			
			if (evento.getSource() == chks[i]){
				suspended[i] = !suspended[i];				
				labels[i].setBackground( !suspended[i] ? Color.green : Color.red );
				
				//se a thread for retomada notificar
				if (!suspended[i])
					notifyAll();
					
				return;
			}
					
		}//Fim do laço
		
	}//Fim do método actionPerformed
	
	
	
	private class RunnableObj implements Runnable
	{
				
		public void run()
		{
			final Thread CURRENT_THREAD = Thread.currentThread();
			final int INDEX = getIndex(CURRENT_THREAD);
			
			while (threads[INDEX] == CURRENT_THREAD){
				
				try {
					Thread.sleep((int) (Math.random() * 1000));
				
					//Determina se a thread deve ter sua execução suspensa. Usa 
					//o applet como monitor
					
					synchronized (RandomCharacters.this){
						
						while(suspended[INDEX] && threads[INDEX] == CURRENT_THREAD){
							//Suspende temporariamente a execução da thread
							RandomCharacters.this.wait();																
						}
						
					}
											
								
				
				}
			
					catch (InterruptedException erro)
					{
						System.err.println(erro.toString());
					}
				
				
				SwingUtilities.invokeLater(new Runnable() {
					public void run()
					{
						char chrDisplay = strAlfabeto.charAt((int)(Math.random() * 26));
						
						labels[INDEX].setText(CURRENT_THREAD.getName() + " : " + chrDisplay);
					}
				});
				
			}			

		}
	}
}

Value

Foi mal galera, esqueci de colocar o código no método start

Eu arrumei mas mesmo assim nada…


import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.regex.Matcher;
import java.awt.Color;


import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.JCheckBox;
import javax.swing.SwingUtilities;

public class RandomCharacters extends JApplet implements ActionListener
{
	
	private String strAlfabeto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	private final int SIZE = 3;
	
	//Vetor com componentes
	private JLabel labels[];
	private JCheckBox chks[];
	
	private Thread threads[];
	private boolean suspended[];
	
	
	
	public void init()
	{
		//define arrays com componentes
		labels = new JLabel[SIZE];
		chks = new JCheckBox[SIZE];
		threads = new Thread[SIZE];
		suspended = new boolean[SIZE];
		
		//define layout
		getContentPane().setLayout(new GridLayout(SIZE,2,5,5));
		
		//cria componentes, adiciona no painel de conteudo, registra tratador de evento		
		for (int i = 0; i < SIZE; i++){
			labels[i] = new JLabel();
			labels[i].setBackground(Color.green);
			labels[i].setOpaque(true);
			getContentPane().add(labels[i]);
			chks[i] = new JCheckBox ( "Suspended");
			chks[i].addActionListener(this);
			getContentPane().add(chks[i]);
		}
						
	}//Fim do método init
	
	
	public void start()
	{
		
		//Criar threads
		for (int i = 0 ; i < threads.length ; i++){
			
			//Cria thread atribuindo um objeto da classe que implementa runnable
			threads[i] = new Thread(new RunnableObj(), "Thread " + (i + 1));
						
			//Inicia thread
			threads[i].start();
				
		}		
		
		
	}///Dim do método start
	
	
	
	private int getIndex(Thread currentThread)
	{
		
		//Procura no array de threads a posição da thread que foi passada 
		for (int i = 0 ; i < threads.length; i++)
			
			//Caso encontre a thread retorna o índice do array onde ela está 
			if (threads[i] == currentThread)
				return i;
		
		
		//Caso não encontre retornar -1
		return -1;
		
	}
	
	
	public synchronized void stop()
	{
		for (int i = 0 ; i < threads.length ; i++)
			threads[i] = null;
		
		notifyAll();
	}
	
	public synchronized void actionPerformed (ActionEvent evento)
	{
		
		for (int i=0; i < chks.length; i++){
			
			if (evento.getSource() == chks[i]){
				suspended[i] = !suspended[i];				
				labels[i].setBackground( !suspended[i] ? Color.green : Color.red );
				
				//se a thread for retomada notificar
				if (!suspended[i])
					notifyAll();
					
				return;
			}
					
		}//Fim do laço
		
	}//Fim do método actionPerformed
	
	
	
	private class RunnableObj implements Runnable
	{
				
		public void run()
		{
			final Thread CURRENT_THREAD = Thread.currentThread();
			final int INDEX = getIndex(CURRENT_THREAD);
			
			while (threads[INDEX] == CURRENT_THREAD){
				
				try {
					Thread.sleep((int) (Math.random() * 1000));
				
					//Determina se a thread deve ter sua execução suspensa. Usa 
					//o applet como monitor
					
					synchronized (RandomCharacters.this){
						
						while(suspended[INDEX] && threads[INDEX] == CURRENT_THREAD){
							//Suspende temporariamente a execução da thread
							RandomCharacters.this.wait();																
						}
						
					}
											
								
				
				}
			
					catch (InterruptedException erro)
					{
						System.err.println(erro.toString());
					}
				
				
				SwingUtilities.invokeLater(new Runnable() {
					public void run()
					{
						char chrDisplay = strAlfabeto.charAt((int)(Math.random() * 26));
						
						labels[INDEX].setText(CURRENT_THREAD.getName() + " : " + chrDisplay);
					}
				});
				
			}			

		}
	}
}

O problema deve ser bem bobo, mas pra quem tiver o livro o exemplo está nas páginas 797, 798,799,780. O capítulo é 15.10

Meu aqui funcionou normalmente, sera que vc nao tem o plugin do java para o seu browse.

O que pode estar ocorrendo eh o teu IE estar com o plugin que nao suporta Swing. Tente atualizar o plugin para a versao mais nova.

Rafael

Onde que eu posso atualizar o plugin, no site da sun eu achei para o plugin mas ele vem com o sdk e eu qeuria só ele.

Eu tentei atualizar e eu estou com a versão mais recente. O problema deve ser outro.

Bom então vc pode ativa-lo quando vc instala o sdk mais atual como o j2sdk1.4.0 ele coloca um icone em seu painel de controle chamado Java Plug-in, abra-o e na aba browse esclolha o browse que vc esta utilizando…

Ativando o plugin funciona…

Já está ativado, na aba browser está marcado internet explorer

Eu abri o java console e está indicando

java.lang.NoClassDefFoundError: RandomCharacters (wrong name: runnable/RandomCharacters)

	at java.lang.ClassLoader.defineClass0(Native Method)

	at java.lang.ClassLoader.defineClass(ClassLoader.java:502)

	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)

	at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:148)

	at sun.plugin.security.PluginClassLoader.findClass(PluginClassLoader.java:168)

	at java.lang.ClassLoader.loadClass(ClassLoader.java:299)

	at sun.applet.AppletClassLoader.loadClass(AppletClassLoader.java:114)

	at java.lang.ClassLoader.loadClass(ClassLoader.java:255)

	at sun.applet.AppletClassLoader.loadCode(AppletClassLoader.java:501)

	at sun.applet.AppletPanel.createApplet(AppletPanel.java:566)

	at sun.plugin.AppletViewer.createApplet(AppletViewer.java:1775)

	at sun.applet.AppletPanel.runLoader(AppletPanel.java:495)

	at sun.applet.AppletPanel.run(AppletPanel.java:292)

	at java.lang.Thread.run(Thread.java:536)

java.lang.NoClassDefFoundError: RandomCharacters (wrong name: runnable/RandomCharacters)

	at java.lang.ClassLoader.defineClass0(Native Method)

	at java.lang.ClassLoader.defineClass(ClassLoader.java:502)

	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)

	at sun.applet.AppletClassLoader.findClass(AppletClassLoader.java:148)

	at sun.plugin.security.PluginClassLoader.findClass(PluginClassLoader.java:168)

	at java.lang.ClassLoader.loadClass(ClassLoader.java:299)

	at sun.applet.AppletClassLoader.loadClass(AppletClassLoader.java:114)

	at java.lang.ClassLoader.loadClass(ClassLoader.java:255)

	at sun.applet.AppletClassLoader.loadCode(AppletClassLoader.java:501)

	at sun.applet.AppletPanel.createApplet(AppletPanel.java:566)

	at sun.plugin.AppletViewer.createApplet(AppletViewer.java:1775)

	at sun.applet.AppletPanel.runLoader(AppletPanel.java:495)

	at sun.applet.AppletPanel.run(AppletPanel.java:292)

	at java.lang.Thread.run(Thread.java:536)