PDA

View Full Version : [Java] Problema!!!


darkmax
23-03-2009, 09:33
Ho questa applet che mi da errore:
package operazione2;

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class Main extends java.applet.Applet implements ActionListener {

protected JTextField numero1,numero2,numero3;
private JButton somma, differenza;
private JLabel lab,lab2,lab3;

@Override
public void init() {

lab = new JLabel("numero 1:");
lab2 = new JLabel("numero 2:");
lab3 = new JLabel("Il risultato è:");

numero1 = new JTextField(10);
numero2 = new JTextField(10);
numero3 = new JTextField(10);

this.add(lab);
this.add(numero1);
this.add(lab2);
this.add(numero2);
this.add(lab3);
this.add(numero3);

somma = new JButton("somma");
differenza = new JButton("differenza");

this.add(somma);
this.add(differenza);


somma.addActionListener(this);
differenza.addActionListener(this);

this.setSize(200,200);

}

public void actionPerformed(ActionEvent e) {

int n1 = Integer.parseInt(numero1.getText());
int n2 = Integer.parseInt(numero2.getText());

if(e.getActionCommand().equals("somma"))
numero3.setText(String.valueOf(n1+n2));

if(e.getActionCommand().equals("differenza"))
numero3.setText(String.valueOf(n1-n2));

}

@Override
public void paint(Graphics g) {
}

}

e l'html è questo:
<HTML>
<BODY>
<H1>Applet: esempio 1</H1>
<APPLET CODE="Main.class" WIDTH=150 HEIGHT=25>
</APPLET>
</BODY>
</HTML>

Mi da questo errore.. perchè?

java.lang.NoClassDefFoundError: Main (wrong name: operazione2/Main)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Eccezione: java.lang.NoClassDefFoundError: Main (wrong name: operazione2/Main)

darkmax
23-03-2009, 09:53
aiuto please

fero86
23-03-2009, 10:56
come puoi ben vedere non é l'applet a darti errore perché nel call stack non appare neanche, quindi il tuo applet non entra neanche in gioco. l'errore poi mi pare molto chiaro: la JVM non riesce a trovare la classe della tua applet; avrai sbagliato a specificare qualche path...

darkmax
23-03-2009, 12:58
come puoi ben vedere non é l'applet a darti errore perché nel call stack non appare neanche, quindi il tuo applet non entra neanche in gioco. l'errore poi mi pare molto chiaro: la JVM non riesce a trovare la classe della tua applet; avrai sbagliato a specificare qualche path...

e dove posso controllare?

PGI-Bis
23-03-2009, 14:02
Il problema è qui:

<APPLET CODE="Main.class" WIDTH=150 HEIGHT=25>

La tua class Main si chiama "operazione2.Main" (aka nome pienamente qualificato).

<APPLET CODE="operazione2.Main.class" WIDTH=150 HEIGHT=25>

Accertati inoltre che il file Main.class si trovi in una sottocartella "operazione2" all'interno della directory in cui è collocato il file html della pagina contenente l'applet.

darkmax
23-03-2009, 14:31
Il problema è qui:

<APPLET CODE="Main.class" WIDTH=150 HEIGHT=25>

La tua class Main si chiama "operazione2.Main" (aka nome pienamente qualificato).

<APPLET CODE="operazione2.Main.class" WIDTH=150 HEIGHT=25>

Accertati inoltre che il file Main.class si trovi in una sottocartella "operazione2" all'interno della directory in cui è collocato il file html della pagina contenente l'applet.

Ho provato a copiare sul desktop la cartella operazione2 che contiene sia il file html sia il file class.. Ho modificato pure il file html qualificando pienamente il nome ma non mi va.. Perchè? Quali prove posso fare?

astorcas
23-03-2009, 14:32
Ho provato a copiare sul desktop la cartella operazione2 che contiene sia il file html sia il file class.. Ho modificato pure il file html qualificando pienamente il nome ma non mi va.. Perchè? Quali prove posso fare?
il file html deve stare fuori dalla cartella operazione2

PGI-Bis
23-03-2009, 14:33
la cartella operazione2 deve contenere il file .class. Se la cartella operazione2 si trova sul desktop metti sul desktop il file html.

darkmax
23-03-2009, 16:12
la cartella operazione2 deve contenere il file .class. Se la cartella operazione2 si trova sul desktop metti sul desktop il file html.

Risolto.. GRAZIE!! Altro problema..



import java.awt.*;
import java.awt.event.*;
import java.sql.*;


public class Interfaccia extends java.applet.Applet implements ActionListener {

// dichiarazione data member della classe
TextField nome, cognome;
Connection conn;
Button salva,visualizza;

public void init() {
try {
//String userName;
//String password;
//String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=db.mdb;";
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=db.mdb");
System.out.println ("Database: connessione stabilita");
}
catch (Exception e)
{
System.err.println ("Impossibile stabilire connessione al database server");
}

add(new Label("Nome"));
nome = new TextField(40);
cognome = new TextField(40);

add(nome);
add(new Label("Cognome"));
add(cognome);

salva= new Button("Salva");
add(salva);
salva.addActionListener(this);

visualizza= new Button("Visualizza");
add(visualizza);
visualizza.addActionListener(this);

}

public void actionPerformed(ActionEvent evt) {

String scelto=evt.getActionCommand();
if (scelto=="Salva") Azione();
if (scelto=="Visualizza") Visualizza();
}

void Azione(){

String n=nome.getText();
String c=cognome.getText();
try {
PreparedStatement s;
String query="INSERT INTO tab(Nome,Cognome) VALUES('"+n+"','"+c+"')";
s = conn.prepareStatement(query);
int count = s.executeUpdate ();
s.close ();
}
catch (Exception e)
{
System.err.println ("Cannot connect to database server");
}

}

void Visualizza(){

try {
Statement s = conn.createStatement ();
s.executeQuery("SELECT * FROM tab");
ResultSet rs = s.getResultSet ();
int count = 0;

while(rs.next ()){
String nomeVal = rs.getString ("Nome");
String cognomeVal = rs.getString ("Cognome");
System.out.println(nomeVal+cognomeVal);
count++;
}
}
catch (Exception e)
{
System.err.println ("Cannot connect to database server");
}

}

public void paint(Graphics g) {

}

}

Perchè non mi vanno i pulsanti? I listener sembrano corretti.. eppure non scrive nulla nel db e non visualizza neanche

astorcas
23-03-2009, 16:32
credo sia qui il problema, ho dato un'occhiata veloce....

if (scelto=="Salva") Azione();
if (scelto=="Visualizza") Visualizza();



prova con


if (scelto.equals("Salva")) Azione();
if (scelto.equals("Visualizza")) Visualizza();


per capire il perché guarda l'operatore == in java come funziona (e come funzionano le stringhe)

PGI-Bis
23-03-2009, 16:37
L'applet dovrebbe incontrare un'eccezione di sicurezza nel momento in cui tenti la connessione alla base dati.

Controlla nella console java e vedi se c'è un messaggio stile "SecurityException".

darkmax
23-03-2009, 23:12
L'applet dovrebbe incontrare un'eccezione di sicurezza nel momento in cui tenti la connessione alla base dati.

Controlla nella console java e vedi se c'è un messaggio stile "SecurityException".

E quindi? Devo semplicemente gestire l'eccezione o non va? Non ho possibilità di provare fino a domani..

PGI-Bis
24-03-2009, 00:51
La seconda che hai detto. Non va.

Per farla andare dovresti certificarla. Non è necessario acquistare un certificato digitale, puoi auto-certificarti con keytool.exe (incluso nel JDK) ma, ovviamente, quando un eventuale terzo volesse usare l'applet si troverà di fronte alla richiesta di accettare una firma digitale di nonna pina: bisognerebbe gridare banzai prima di accettare.