Applet no Internet Explorer bloqueia mdb!

15 respostas
paulinhohd

E ae galera,

Um breve problema:
Estou desenvolvendo um Applet no Eclipse, a conexão com o banco Acess está perfeita, quando roda no Appletvierw funciona que é uma beleza, mas quando crio o HTML chamando o .class, o Internet Explorer start o Applet normal, exibe todos os botões, panels normal, porém não me permite acessar o Banco.

Alguém sabe me dizer se é alguma espécie de bloqueio do Internet Explorer, ou há algum comando para liberar isso?

Valeu foristas!


Paulinho Hd++
[email removido]
[email removido]
Cel:99172752
ICQ:310387161

15 Respostas

_fs

Bem vindo!

Seu applet precisa ser assinada, leia aqui todos os detalhes:
http://java.sun.com/sfaq/

Se tiver dúvidas quanto à implementação, buque no fórum pois o tema já foi bastante discutido.

paulinhohd

Ae Lipe, dei uma lida no link da Sun que me passou, mas estou meio confuso ainda, e que bom que este tema já foi bem discutido, sinal que não estou tão ruim assim rs.

Aí está um breve começo do meu código:

/*

  • Created on 17/03/2005
  • TODO To change the template for this generated file go to
  • Window - Preferences - Java - Code Style - Code Templates
    */

/**

  • @author PauloR

  • TODO To change the template for this generated type comment go to

  • Window - Preferences - Java - Code Style - Code Templates
    
    <em>/
    
    import java.sql.</em>;
    
    import <a href="http://javax.net">javax.net</a>.<em>;
    
    import java.awt.</em>;
    
    import java.awt.event.<em>;
    
    import javax.swing.</em>;
    
    public class Principal extends JApplet{
    
    //*****<strong><strong><strong><strong>Definições das Variáveis</strong></strong></strong></strong>
    
    Image logo1, logo2;
    
    Panel Painel1,Painel2,Painel3,PPedido;
    
    JButton BEntrar,BSair,BConecta,BMInicial,BMPedidos,BMRelatorios,BMSair;
    
    JTextField TUsuario,TPNumero,TPCodigoCliente,TPCliente,TPTelefone;
    
    JPasswordField TSenha;
    
    JLabel Label1, Label2,Label3,PLabel1,PLabel2,PLabel3,PLabel4;
    
    String Senha,Usuario;
    
    //*********************************************
    
    public void init() {
    
    //<em><strong><strong><strong><strong>Definições dos componentes</strong></strong></strong></strong>
    
    Painel1 = new Panel();
    
    Painel2 = new Panel();
    
    Painel3 = new Panel();
    
    PPedido = new Panel();
    
    TUsuario = new JTextField();
    
    TSenha = new JPasswordField();
    
    TPNumero = new JTextField();
    
    TPCodigoCliente = new JTextField();
    
    TPCliente = new JTextField();
    
    TPTelefone = new JTextField();
    
    BEntrar = new JButton(Entrar);
    
    BSair = new JButton(Sair);
    
    BConecta = new JButton(Conectar);
    
    BMInicial = new JButton(Início);
    
    BMPedidos = new JButton(Pedidos);
    
    Label1 = new JLabel(USUÁRIO:);
    
    Label2 = new JLabel(SENHA:);
    
    Label3 = new JLabel("</em>*******   INÍCIO   *<em><strong><strong><strong>");
    
    PLabel1 = new JLabel(NÚMERO:);
    
    PLabel2 = new JLabel(CÓD.CLIENTE:);
    
    PLabel3 = new JLabel(CLIENTE:);
    
    PLabel4 = new JLabel(TELEFONE:);
    
    //<em><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Conexão com BANCO</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></em></strong></strong></strong></em>
    
    /<em>BConecta.addActionListener(new ActionListener(){
    
    public void actionPerformed(ActionEvent e){
    
    try
    
    {
    
    Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
    
    }
    
    catch(ClassNotFoundException Erro)
    
    {
    
    }
    
    try
    
    {    	
    
    Connection Conexao = DriverManager.getConnection(jdbc:odbc:Driver= +
    
    "{Microsoft Access Driver (</em>.mdb)};" +
    
    DBQ=C:\Projeto\Representantes\Representantes\bin\teste.mdb,"","");
    
    Statement FluxoSQL = Conexao.createStatement();
    
    Statement InstrucaoSelectSQL = Conexao.createStatement();
    
    ResultSet Resultados = InstrucaoSelectSQL.executeQuery(SELECT Cliente FROM Tab_Cliente);
    
    Resultados.next();
    
    String Cliente = Resultados.getString(1).trim();
    
    System.out.println(Cliente = " + Cliente);
    
    TPCliente.setText(” " + Cliente);
    
    <a href="//InstrucaoSelectSQL.close">//InstrucaoSelectSQL.close</a>();
    
    <a href="//Conexao.close">//Conexao.close</a>();
    
    }
    
    catch(SQLException Erro)
    
    {
    
    }
    
    }
    
    });*/
    
    BConecta.addActionListener(new ActionListener(){
    
    public void actionPerformed(ActionEvent e){
    
    try
    
    {
    
    Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
    
    }
    
    catch(ClassNotFoundException Erro)
    
    {
    
    }
    
    try
    
    {
    
    Connection Conexao = DriverManager.getConnection(jdbc:odbc:Teste,"","");
    
    Statement FluxoSQL = Conexao.createStatement();
    
    Statement InstrucaoSelectSQL = Conexao.createStatement();
    
    ResultSet Resultados = InstrucaoSelectSQL.executeQuery(SELECT Cliente FROM Tab_Cliente);
    
    Resultados.next();
    
    String Cliente = Resultados.getString(1).trim();
    
    System.out.println(Cliente = " + Cliente);
    
    TPCliente.setText(” " + Cliente);
    
    Conexao.close();
    
    }
    
    catch(SQLException Erro)
    
    {
    
    }
    
    }
    
    });
    
    //*********************************************************************************************************
     BEntrar.addActionListener(new ActionListener(){
     public void actionPerformed(ActionEvent e){
     	Usuario = TUsuario.getText();
     	Senha = TSenha.getText();
     	if(Usuario.equals("Paulo")==false){
     		  JOptionPane.showMessageDialog(null,"Usuário incorreto");
     		  TUsuario.setText("");
     		  TUsuario.setSelectedTextColor(Color.BLUE);
     		  }
     	else if(Senha.equals("12345")==false){
     	  JOptionPane.showMessageDialog(null,"Senha incorreta");
     	  TSenha.setText("");
     	  }
     	else {getContentPane().add(Painel2);
     		}
     	}
     });
     BSair.addActionListener(new ActionListener(){
     public void actionPerformed(ActionEvent e){
     	System.exit(0);
     	}
     });
     
     BMInicial.addActionListener(new ActionListener(){
     	public void actionPerformed(ActionEvent e){
     		PPedido.setVisible(false);
     		Painel3.setVisible(true);
     	}
     });
     BMPedidos.addActionListener(new ActionListener(){
     	public void actionPerformed(ActionEvent e){
     		Painel3.setVisible(false);
     		PPedido.setVisible(true);
     	}
     });	
     BMRelatorios = new JButton("Relatórios");
     BMSair = new JButton("Sair");
    
    //*******************************************************************************************	
    
    //<strong><strong><strong><strong>Manipulação dos Componentes</strong></strong></strong></strong>***	
    
    getContentPane().setLayout(null);
    
    Painel1.setLayout(null); Painel2.setLayout(null);
    
    Painel3.setLayout(null); PPedido.setLayout(null);
    
    Painel1.setBackground(Color.WHITE);	Painel2.setBackground(Color.WHITE);
    
    Painel1.reshape(600,0,200,100);	Painel2.reshape(5,100,200,100);
    
    Painel3.reshape(225,100,500,280); PPedido.reshape(225,100,500,280);
    
    TUsuario.reshape(70,5,90,20); TSenha.reshape(70,30,90,20);
    
    TPNumero.reshape(100,5,90,20); TPCodigoCliente.reshape(100,25,90,20);
    
    TPCliente.reshape(100,45,200,20); TPTelefone.reshape(100,65,90,20);
    
    BEntrar.reshape(0,55,80,20); BSair.reshape(80,55,80,20); BConecta.reshape(0,75,80,20);		
    
    Label1.reshape(0,5,70,25); Label2.reshape(0,30,70,25); Label3.reshape(100,50,200,200);
    
    PLabel1.reshape(0,5,90,20);	PLabel2.reshape(0,25,90,20);
    
    PLabel3.reshape(0,45,90,20); PLabel4.reshape(0,65,90,20);
    
    BMInicial.reshape(0,0,200,25); BMPedidos.reshape(0,25,200,25);
    
    BMRelatorios.reshape(0,50,200,25); BMSair.reshape(0,75,200,25);
    
    BMInicial.setBackground(Color.ORANGE); BMPedidos.setBackground(Color.ORANGE);
    
    BMRelatorios.setBackground(Color.ORANGE); BMSair.setBackground(Color.ORANGE);
    
    int i=0;
    
    (new Integer(i)).toString();
    
    TPNumero.setText(""+i);
    
    i++;
    
    //**********************************************************************************************
    
    //<em><strong><em><strong><strong><strong><strong><strong>Adicionando os Componentes</strong></strong></strong></strong></strong></em>	
    
    logo1 = getImage(getDocumentBase(), logo.jpg);
    
    getContentPane().add(Painel1);
    
    getContentPane().add(Painel2);
    
    getContentPane().add(Painel3);
    
    getContentPane().add(PPedido);
    
    Painel3.setVisible(false);
    
    PPedido.setVisible(false);
    
    Painel1.add(BEntrar); Painel1.add(BSair); Painel1.add(BConecta);
    
    Painel1.add(TUsuario); Painel1.add(TSenha);
    
    Painel1.add(Label1); Painel1.add(Label2);
    
    Painel2.add(BMInicial); Painel2.add(BMPedidos);
    
    Painel2.add(BMRelatorios); Painel2.add(BMSair);
    
    Painel3.add(Label3);
    
    PPedido.add(TPNumero); PPedido.add(TPCodigoCliente);
    
    PPedido.add(TPCliente);	PPedido.add(TPTelefone);
    
    PPedido.add(PLabel1); PPedido.add(PLabel2);
    
    PPedido.add(PLabel3); PPedido.add(PLabel4);
    
    //</strong></em>*************************************************	
    
    }
    
    /<em>public void start(){
    
    try
    
    {
    
    Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
    
    }
    
    catch(ClassNotFoundException Erro)
    
    {
    
    }
    
    try
    
    {    	
    
    Connection Conexao = DriverManager.getConnection(jdbc:odbc:Driver= +
    
    "{Microsoft Access Driver (</em>.mdb)};" +
    
    DBQ=C:\Projeto\Representantes\Representantes\bin\teste.mdb,"","");
    
    Statement FluxoSQL = Conexao.createStatement();
    
    Statement InstrucaoSelectSQL = Conexao.createStatement();
    
    ResultSet Resultados = InstrucaoSelectSQL.executeQuery(SELECT Cliente FROM Tab_Cliente);
    
    Resultados.next();
    
    String Cliente = Resultados.getString(1).trim();
    
    System.out.println(Cliente = " + Cliente);
    
    TPCliente.setText(” " + Cliente);
    
    InstrucaoSelectSQL.close();
    
    Conexao.close();
    
    }
    
    catch(SQLException Erro)
    
    {
    
    }
    
    }*/
    
    public void paint(Graphics G){
    
    int Altura; Font Fonte; FontMetrics MedidasFonte;
    
    G.drawImage(logo1,0,1,this);
    
    Fonte = new Font("Times New Roman",Font.ITALIC,35);
     G.setFont(Fonte);
     G.setColor(Color.BLUE);
     G.drawString("Leal Carneiro & Cia. Ltda",180,40);
    
     Fonte = new Font("Courier new",Font.ITALIC,12);
     G.setFont(Fonte);
     G.drawString("Leal Carneiro & Cia. Ltda",0,370);
    

    }
    }

Como devo assiná-lo para ele acessar o mdb???
Estou rodando ele no Internet Explorer 6 alguma coisa rs.

Se puder me auxiliar serei grato!

Valeu!

_fs

Tem que assinar.

http://www.guj.com.br/jforum.java?module=search&action=search&clean=1&search_keywords=applet+assinar+security&search_terms=all&search_forum=&sort_by=p.post_time&sort_dir=DESC&search_cat=
http://java.sun.com/docs/books/tutorial/security1.2/tour1/index.html

dica: quando for postar código, coloque-o entre as tags [ code]seucodigo[ /code], assim ele ficará endentado.
dica2: se você vê um mesmo trecho de código em mais de um lugar, é uma boa idéia colocar o procedimento em um método.

paulinhohd

Ae Lipe, foi mal pelas palas no Fórum, é que sou meio novato aki hauhau…

Consegui assinar , aparentemente deu tudo certo, só que agora quando abro meu html com o applet já assinado aparece a seguinte tela do certificado:

Abre uma janela com as seguintes mensagens:

Do you want to the trust the signed applet distributed by “empresa”?
Publisher authenticity can not be verified.

The security certificate was issued by a company that is not trusted.

The security certificate has not expired and is still valid.

Então me da as opções de yes, no ou always, porém já fiz todos os testes e qualquer um que eu escolha, o applet não starta.

Sabe qual o erro que eu devo ter cometido?

_fs

Cara, estou te ajudando à cegas hehe nunca mexi com isso.

Quando você abre a página com o Applet, no systray do window aparece um ícone do Java, certo? Clica no danadinho e pede para mostrar o Java Console, ali você consegue ver se alguma exceção está acontecendo.

paulinhohd

Valeu mesmo assim Lipe, já está sendo de grande ajuda.
O erro que aparece no console é:

java.security.AccessControlException: access denied (java.util.PropertyPermission java.home read)

at java.security.AccessControlContext.checkPermission(Unknown Source)

at java.security.AccessController.checkPermission(Unknown Source)

at java.lang.SecurityManager.checkPermission(Unknown Source)

at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)

at java.lang.System.getProperty(Unknown Source)

at sun.plugin.security.PluginClassLoader.getPermissions(Unknown Source)

at java.security.SecureClassLoader.getProtectionDomain(Unknown Source)

at java.security.SecureClassLoader.defineClass(Unknown Source)

at sun.applet.AppletClassLoader.findClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at sun.applet.AppletClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClassInternal(Unknown Source)

at Principal.init(Principal.java:55)

at sun.applet.AppletPanel.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

Creio que esteja dando este erro por eu ter colocado AllPermissions no meu arquivo java.policy que gerei com o PolicyTool. Será?

Valeu

_fs

Não hehe justamente o contrário. Tem certeza que colocou AllPermissions? Já tentou colocar permissão só para IO? Tem certeza que está clicando em YES ou ALWAYS? :XD:

paulinhohd

Me tirou perguntando se eu realmente tenho certeza de ter clicado em yes hein…

Mas tudo bem, eu postei um novo tópico com o erro, mesmo eu colocando só com allpermissions, depois vc dá uma olhada lá, valeu…

Falou! 8)

_fs

hehe estava brincando ;D

T

Aham, applets e bancos de dados não se misturam bem.
Que tal fazer um JSP que consulte o banco de dados?
Aí você tem de configurar o JDBC e o ODBC num lugar só (no Tomcat), não tem de assinar nada, HTML costuma ser mais fácil que o Swing, não tem de instalar o JRE na máquina que tem o browser, não tem de se preocupar com a quantidade limitada de memória acessível para o plugin, etc.
Dica: mesmo assinando, tem lugares na applet (tal como “start” e “init”) que rodam em contexto não-seguro, e é por isso que ele reclama à beça.
(isso é mais visível em ambiente Microsoft, onde mesmo assinando a applet você precisa setar uma permissão de segurança dentro do próprio código).

paulinhohd

Tingol, Vc tem algum tutorial que possa me auxiliar nisso??
Vc diz de eu começar a aplicação novamente fazendo tudo em JSP?

Valeu… 8)

T

Na verdade não é para jogar tudo fora e fazer de novo.

É para entender qual é realmente o seu problema e ver como é que dá para resolver. A gente tem sempre que perguntar um monte de coisas antes de botar a mão na massa.

  • Quanta gente vai usar a aplicação
  • O banco vai ficar local na máquina do usuário ou deve ser compartilhado por todos os usuários
  • Onde você vai hospedar a aplicação
  • O que a aplicação deve fazer

São vários problemas de arquitetura, que deveriam ter sido resolvidos ANTES de começar a escrever o applet.

Dica: tem muita coisa que dá pra aproveitar se você vai partir para uma solução JSP ou Java stand-alone (sem browser), não se desespere.
Por exemplo, se você simplesmente vai fazer uma aplicação (e não um applet), você quase não tem de mexer no seu código, mas em compensação tem um monte de coisa que o pessoal vai acabar pedindo para você fazer - por exemplo, se você quer listar alguma coisa na impressora, você vai ter de aprender a parte de impressão, que não é simples.
Se você vai fazer em JSP, você joga fora a parte do Swing, e tem de pensar em termos de aplicação Web - é diferente de pensar em termos de uma aplicação Java normal. Em compensação, a parte de desenhar telas é HTML, e HTML todo mundo conhece. Impressão o browser fornece (embora nunca saia do jeito que você quer). E assim por diante.
E a parte do applet e permissões? Procure “System.setSecurityManager” e SecurityManager, em algum lugar deve ter o fonte de um SecurityManager que abre todas as permissões…

paulinhohd

Realmente eu deveria ter perguntado para galera primeiro, valeu Tingol
Eu postei um novo tópico pedindo auxílio para o povão, d~e uma olhada lá.
E a aplicação tem de rodar no IE, e terá um banco local para cada máquina, no raíz, juntamente da aplicação.
Valeu!! 8)

smota

paulinhohd:
Realmente eu deveria ter perguntado para galera primeiro, valeu Tingol
Eu postei um novo tópico pedindo auxílio para o povão, d~e uma olhada lá.
E a aplicação tem de rodar no IE, e terá um banco local para cada máquina, no raíz, juntamente da aplicação.
Valeu!! 8)

Sobre o applet assinado veja este artigo rápido pra entender.

Sobre a solução que o Thingol sugeriu veja: Database Access Using Lightweight Applets

Sobre esse negócio de “e terá um banco local para cada máquina, no raíz, juntamente da aplicação” cheira confusão, e a menos que você tenha alterado o código vc tá dizendo uma coisa e fazendo outra: "DBQ=C:\\Projeto\\Representantes\\Representantes\\bin\\teste.mdb","","");

Lembrando que o applet não tem um diretorio na máquina do cliente, terá sim que usar o caminho completo, mas sua applet (assinada) deve baixar o mdb pro diretório que ela pretende usar.

Mais um problema: quem vai fazer backup da base dos usuários?

Esse desenho é meio xarope de ser mantido … talvez ao inves disso vc possa ter um banco de dados (de verdade, nao o access) centralizado com os dados mapeados para cada usuário (pelo username, userid, whatever).

paulinhohd

Consegui galera…minha aplicação tá perfeita hauhauha rodando bonitinho…valeu a colaboração de todos…

Um abraço hauhauhuaha…

Valeu!!! 8)

Criado 28 de março de 2005
Ultima resposta 31 de mar. de 2005
Respostas 15
Participantes 4