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)