我正在eclipse中开发一个applet,当从Eclipse的AppletViewer执行时,它可以正常工作,但是从.html文件执行时,它不执行class.forName()方法。

这是.html

<!DOCTYPE html>
<html>
<body>

<p>Tarjetero.</p>

<applet
codebase="classes"
code="ap.class"
width=234 height=274
archive="jaybird-full-2.2.0.jar">
</applet>

</body>
</html>


在同一文件夹中,我拥有所有创建的.class和jaybird .jar存档

这里的java文件

ap.java

import javax.swing.JApplet;


public class ap extends JApplet {

/**
 *
 */
private static final long serialVersionUID = 1L;

ui inter = new ui();

@Override
public void init() {
    // TODO Auto-generated method stub
    //JPanel p = new JPanel();
    //p.add(new JLabel("prueba"));
    inter.setVisible(true);
    this.add(inter);
}

@Override
public void start() {
    // TODO Auto-generated method stub
    super.start();
}

}


ui.java

import javax.swing.JPanel;


public class ui extends JPanel {

static JButton btnNewButton;
/**
 *
 */
private static final long serialVersionUID = 1L;

/**
 * Create the panel.
 */
public ui() {
    setLayout(null);

     btnNewButton = new JButton("New button");

    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            try {
                btnNewButton.setText("1");
            ConexFirebird cf = new ConexFirebird();
            btnNewButton.setText("2");
            ResultSet rs = cf.EjecutarSentencia("SELECT nombre FROM CLIENTES;");
            btnNewButton.setText("3");


                if(rs.next())
                {
                    btnNewButton.setText("datos");
                }
                else
                {
                    btnNewButton.setText("nodatos");
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                btnNewButton.setText(e.getMessage());
                e.printStackTrace();
            }

        }
    });
    btnNewButton.setBounds(12, 12, 117, 24);
    add(btnNewButton);

    JRadioButton rdbtnNewRadioButton = new JRadioButton("New radio button");
    rdbtnNewRadioButton.setBounds(8, 44, 149, 22);
    add(rdbtnNewRadioButton);

    JCheckBox chckbxNewCheckBox = new JCheckBox("New check box");
    chckbxNewCheckBox.setBounds(18, 70, 129, 22);
    add(chckbxNewCheckBox);

}
}


conexFirebird.java

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.*;
import javax.swing.JOptionPane;


/**
*
* @author Jose
*/
public class ConexFirebird {
// static File directorio= new File("//");
//static String DireccionBD="jdbc:firebirdsql:192.168.47.254/3050:/BBDD/ArenasTiradoJoseMTarjetero.fdb";
static String DireccionBD="jdbc:firebirdsql:localhost/3050:/var/lib/firebird/2.5/data/tarjetavisitas.fdb";
static String Usuario="sysdba";
//static String Contrasena="persiza";
String Contrasena="masterkey";

static String NombreDriver="org.firebirdsql.jdbc.FBDriver";

static Connection Conexion;
static Statement Consulta;
static ResultSet Resultado;

public ConexFirebird()
{
        try
    {

            ui.btnNewButton.setText("10");
       Class.forName(NombreDriver) ;
       ui.btnNewButton.setText("11");
       Conexion = DriverManager.getConnection(DireccionBD, Usuario, Contrasena);
       ui.btnNewButton.setText("12");
       Consulta = Conexion.createStatement();
       ui.btnNewButton.setText("13");


    }
    catch (ClassNotFoundException e) {
        // TODO: handle exception
        ui.btnNewButton.setText("classNfound");
    }
    catch(Exception e)
    {
        ui.btnNewButton.setText("23");
        JOptionPane.showMessageDialog(null, e.getMessage());

    }
}

public void EjecutarInsert(String Sentencia)
{
    try {
        Consulta.execute(Sentencia);
        JOptionPane.showMessageDialog(null, "Guardado correctamente", "Guardado", JOptionPane.INFORMATION_MESSAGE);
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        JOptionPane.showMessageDialog(null, "Ese DNI ya se encuentra en la base de datos", "Error", JOptionPane.INFORMATION_MESSAGE);
    }
}


public ResultSet EjecutarSentencia(String Sentencia)
{
    try
    {
    Resultado = Consulta.executeQuery(Sentencia);
    }
    catch(Exception e)
    {
        JOptionPane.showMessageDialog(null, e.getMessage()+"ejecutar sentencia");
    }

    return Resultado;
}


public void EjecutarUpdate(String Sentencia) throws SQLException
{
   try
    {
    Consulta.executeUpdate(Sentencia);


    }
    catch(SQLException e)
    {

        //JOptionPane.showMessageDialog(null, e.getMessage());
        throw new SQLException("");

    }
}

public void CerrarConexion()
{
    try
    {
    Consulta.close();
    }
    catch(Exception e)
    {

    }
}

public void insertarConBlob(String nombre, String dni, String correo, File fD, File fA)
{
    try {
        PreparedStatement ps;
        if(fD != null && fA != null)
        {
            ps = Conexion.prepareStatement("INSERT INTO CLIENTES (ID, NOMBRE, DNI, CORREO, FOTODELANTE, FOTODETRAS ) VALUES ( gen_id(id_clientes, 1), '"+nombre+"', '"+dni+"', '"+correo+"', ?, ?)");
            try{
            ps.setBlob(1, new FileInputStream(fD));
            ps.setBlob(2, new FileInputStream(fA));
            ps.execute();
            JOptionPane.showMessageDialog(null, "Guardado correctamente", "Guardado", JOptionPane.INFORMATION_MESSAGE);
            }
            catch(FileNotFoundException e)
            {
                JOptionPane.showMessageDialog(null, "No se encontro el archivo", "Error", JOptionPane.INFORMATION_MESSAGE);
            }
            catch(SQLException e)
            {
                JOptionPane.showMessageDialog(null, "Ese DNI ya se encuentra en la base de datos", "Error", JOptionPane.INFORMATION_MESSAGE);
            }
        }
        else if (fD != null)
        {
            ps = Conexion.prepareStatement("INSERT INTO CLIENTES (NOMBRE, DNI, CORREO, FOTODELANTE) VALUES ( '"+nombre+"', '"+dni+"', '"+correo+"', ?)");
            try{
            ps.setBlob(1, new FileInputStream(fD));
            ps.execute();
            }
            catch(FileNotFoundException e)
            {
                JOptionPane.showMessageDialog(null, "No se encontro el archivo", "Error", JOptionPane.INFORMATION_MESSAGE);
            }
        }
        else if (fA != null)
        {
            ps = Conexion.prepareStatement("INSERT INTO CLIENTES (NOMBRE, DNI, CORREO, FOTODETRAS) VALUES ( '"+nombre+"', '"+dni+"', '"+correo+"', ?)");
            try{
            ps.setBlob(1, new FileInputStream(fA));
            ps.execute();
            }
            catch(FileNotFoundException e)
            {
                JOptionPane.showMessageDialog(null, "No se encontro el archivo", "Error", JOptionPane.INFORMATION_MESSAGE);
            }
        }






    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}


我知道所有这些java文件都可以改进。
我必须使用更改按钮标签来进行调试,因为我无法在iceweasel中找到控制台

操作系统:Debian
浏览器:Iceweasel
Java JDK 1.6
杰伊鸟2.2.0

在此先感谢,您只需要回答这个问题即可!谢谢!

最佳答案

就我所知,Jaybird并不是在设计小程序的,因为据我所知,它将尝试生成系统属性,因此会生成错误(在浏览器中运行时)。它将在AppletViewer中运行,因为afaik-具有所有权限运行。

也可以看看:


http://tracker.firebirdsql.org/browse/JDBC-254
NoClassDefFoundError with jdbc applet


还要确保将jaybird-2.2.1.jarconnector-api-1.5.jarjaybird-full-2.2.1.jar(包含connector-api中的类)结合使用,因为没有它,驱动程序将无法工作。

关于java - Java Applet不使用Jaybird执行class.forName(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12732973/

10-10 10:32