【问题标题】:Java Applet not executing class.forName() with jaybirdJava Applet 不使用 jaybird 执行 class.forName()
【发布时间】:2012-10-05 19:04:30
【问题描述】:

我在 Eclipse 中开发一个小程序,当从 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

提前致谢,您只需提出问题即可回答!谢谢!

【问题讨论】:

  • 能不能打开java控制台。没有可见的错误? .由于小程序的限制,您无法访问您选择的文件和任何目录。在 Eclipse 中,尝试在 url 中不使用仅tarjetavisitas.fdb 的路径。如果可行,它将在 Applet 中运行。
  • 现在在 class.forName() 方法中给出一个 ClassNotFoundException 我认为它关于找不到 jaybird jar,有一个错误我的意思是我不能打开 java 控制台我认为没有更多的支持那
  • 将整个 jar 内容解压到你的 app.class 所在的文件夹中。之后还会有一个文件夹org。现在从小程序代码中删除 'archive="jaybird-full-2.2.0.jar"`。在 Eclipse 中运行它?
  • 不适用于 .html 文件
  • 我认为您有所需的文件,而不是在“www/htdocs/myapp”目录中(无论指向您的服务器 webroot)

标签: java browser applet jaybird


【解决方案1】:

Jaybird 在设计时并未考虑到小程序,据我所知,它会产生错误(在浏览器中运行时),因为它会尝试读取系统属性。它将在 AppletViewer 中工作,因为 - afaik - 以所有权限运行。

另见:

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

【讨论】:

  • 我签署了jar并更改为jaybird-full-2.2.1.jar 仍然是同样的问题,但感谢您的帮助!!,我会将您的答案标记为有效
  • 堆栈跟踪有助于确定它
  • 我无法获取 stackTrace,因为它在浏览器中崩溃并且我无法获取控制台,我尝试将 JConsole 附加到 IcedTea 插件但它不能,我会尝试如果我最终得到它并粘贴到这里
  • 我终于设法将 JConsole 连接到 icedTea 插件,但我不知道如何从发生的异常中获取堆栈跟踪,有什么提示吗?
  • JConsole我用的不多,所以不太清楚。
【解决方案2】:

你的起始代码应该是这样的

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

【讨论】:

  • 该链接适用于平台:Windows 7、Vista、Windows XP、Windows 2000,我使用的是 debian
  • 我在 class.forName("org.firebirdsql.jdbc.FBDriver"); 中得到 ClassnotFoundException我认为这与权限无关,因为有一个包含此内容的 java.policy.applet /* 自动生成于 2002 年 4 月 16 日星期二 17:20:59 EDT */ /* 不要编辑 */ grant { permission java.security.AllPermission ; };
  • 在 Linux 上运行 Java 控制面板还为时过早(对于 ubuntu askubuntu.com/questions/65600/how-to-show-java-plugin-console 类似示例)和其他所有相同
  • 我已经举例说明了您的小程序脚本应该如何编写,只需复制并尝试
  • @J.Arenas BTW,您必须在此处启用控制台并推送错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多