Problema con Applet y firma.

Buenas a tod@s, estoy intentando hacer una prueba de un Applet pero no puedo porque en Java 8 la seguridad es muy fuerte con los applets.
Como les comento, he creado uno de prueba y no puedo ejecutarlo porque me aparece el siguiente mensaje:
Applet
Lo he firmado con las herramientas que trae el propio JDK (keytool y jarsigner) pero ni así he podido, al parecer las aplicaciones autofirmadas no se ejecutan... ¿Entonces para que están esas herramientas? >_<. He leído que se puede usar OpenSSL pero no entiendo los ejemplos u_u. También he leído sobre AC, pero al parecer son de certificados de paga, y yo soy pobre já.

Encontré que también se puede agregar una excepción en la configuración de Java, lo hice, agregue la ruta del HTML (aunque el propio Java me dice que no son seguros los protocolos FILES y HTTP). Y no "funka", jajaja, nunca me había metido con los applets, pensé que eran simples pero no, son jodidamente molestos... Esa info la encontre en esta pagina: https://www.java.com/es/download/help/java_blocked.xml

Este es mi html:

<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <div>TODO write content</div>
    <applet code="macaddress.Ventana" archive="MacAddress.jar" width="400" height="400">
        <param name="permissions" value="all-permissions"/>
        </applet>
    </body>
</html>

Alguien que se apiade de mi y me eche una mano, sinceramente no se me ocurre nada. Es la primera vez que trabajo con Applets porque no me quise animar con los de JavaFX jajaja... estoy pollo pues... Cualquier comentario es bueno!!! :)
Saludos y gracias por leer.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Jose Manuel

Error de novato...

Jajajajajajaja, reinicie el navegador y el applet funciona -_- pero solo porque esta agregado a la lista de excepciones y aun así me apareció un mensaje de advertencia. No pensé, y no tome captura de la ventana u_u pero el chiste es que ahora si funciona el applet, con maña, pero funciona.

Aunque aun me gustaría saber si existe una forma correcta de hacer un applet.
Saludos.

Imagen de ezamudio

No

La mejor forma de hacer un applet es NO hacer un applet.

Si realmente necesitas que ejecuten los usuarios una aplicación de escritorio que sea accesible desde un navegador, mejor usa java web start.

Imagen de Jose Manuel

Jajaja pobres Applets, ya nadie los quiere.

¿Si? Es que necesito crear una aplicación que capture las direcciones MAC de los usuarios (aunque aun no se si se pueda, ya que lo intente en C# y me devolvía la MAC del servidor), según yo, para mas rápido y simple pensé en usar Applets.

Entiendo, hice una búsqueda mas o menos rápida, y encontré estos sitios:
https://netbeans.org/kb/73/java/javase-jws.html
http://docs.oracle.com/javase/tutorial/deployment/webstart/
http://examples.javacodegeeks.com/java-basics/web-start/java-web-start-g...

¿Cual me podrían recomendar para crear un buen proyecto? Me agrada el primero y el segundo, ¿Que opinan?

Gracias y saludos.

Imagen de arterzatij

Y en si que seria lo que

Imagen de Jose Manuel

Perdón por la demora...

Perdón por haber tardado en responder, básicamente lo que quiero hacer es obtener la dirección física del cliente, (ahora mediante jnlp). En tu enlace utilizan Servlets, y dicen que se puede obtener la dirección MAC pero utilizando ARP y solo si esta lo suficientemente cerca, en un concentrador o en un switch, pero la aplicación que me piden va a pasar por una infraestructura de red que desconozco D: y no se si me vayan a dar esa información (Es parte de mis practicas, me pusieron a hacer otras cosas XD). Pero utilizando un jnpl ¿Será posible? Digo, según el objetivo de esta especificación es obtener acceso a propiedades de la maquina cliente. Pero como no he tenido tiempo para probarlo recurro a su conocimiento y experiencia para que me ayuden.

Saludos.

Suponiendo que estés

Suponiendo que estés familiarizado con NetBeans, ¿ya viste la guía que aparece en https://netbeans.org/kb/docs/java/javase-deploy.html#javaws ?

Adicionalmente, tal vez el siguiente código puede serte de utilidad:

Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces();
while (e.hasMoreElements()) {
    NetworkInterface ni = e.nextElement();
    if (ni.isUp()) {
        byte[] address = ni.getHardwareAddress();
        if (address != null && address.length != 0) {
            StringJoiner joiner = new StringJoiner("-");
            for (byte b : address) {
                joiner.add(String.format("%02X", b));
            }
            System.out.println(joiner.toString());
        }
    }
}

~~~

Imagen de Jose Manuel

Muchas gracias, por la

Muchas gracias, por la respuesta, si, estoy familiarizado con NetBeans, y aunque no lo estuviera es trabajo de un Ingeniero adaptarse. Actualmente no puedo intentarlo por cuestiones de tiempo y otros trabajos, veré si mañana lo logro y les aviso.
Saludos y gracias por responder.

Imagen de Jose Manuel

Le sufro mucho con el JWS >_>

He seguido el primer enlace que coloque, en el que netbeans te guia, he podido crear el jnlp, se lanza en el navegador (firefox) de manera local perfectamente pero al momento de ejecutarse da error, y note que en la parte de Ubicacion me coloca el nombre del fichero jar junto con el jnlp.

error
Este es el contenido del archivo jnlp:

<jnlp codebase="file:/C:/Users/usuario/Documents/NetBeansProjects/Testing/dist/" href="launch.jnlp" spec="1.0+">
  <information>
    <title>Testing</title>
    <vendor>JoseManuel</vendor>
    <homepage href=""/>
    <description>Testing</description>
    <description kind="short">Testing</description>
  </information>
  <update check="always"/>
  <security>
    <all-permissions/>
  </security>
  <resources>
    <j2se version="1.8+"/>
    <jar href="Testing.jar" main="true"/>
  </resources>
  <application-desc main-class="testing.Testing"/>
</jnlp>

La excepcion que me lanza es la siguiente:

java.lang.NumberFormatException: For input string: "\Users\usuario\Documents\NetBeansProjects\Testing\dist"
        at java.lang.NumberFormatException.forInputString(Unknown Source)
        at java.lang.Integer.parseInt(Unknown Source)
        at java.lang.Integer.parseInt(Unknown Source)
        at com.sun.deploy.security.DeployManifestChecker.verifyCodebaseEx(Unknown Source)
        at com.sun.deploy.security.DeployManifestChecker.verifyCodebase(Unknown Source)
        at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source)
        at com.sun.deploy.security.DeployManifestChecker.verify(Unknown Source)
        at com.sun.javaws.security.AppPolicy.grantUnrestrictedAccess(Unknown Source)
        at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResourcesHelper(Unknown Source)
        at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResources(Unknown Source)
        at com.sun.javaws.Launcher.prepareResources(Unknown Source)
        at com.sun.javaws.Launcher.prepareAllResources(Unknown Source)
        at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
        at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
        at com.sun.javaws.Launcher.launch(Unknown Source)
        at com.sun.javaws.Main.launchApp(Unknown Source)
        at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
        at com.sun.javaws.Main.access$000(Unknown Source)
        at com.sun.javaws.Main$1.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

Bug en NetBeans

Parece ser un bug de NetBeans. Hace poco probé con NetBeans 8 el tutorial que te mencioné en un post paralelo. No obstante, no tuvo el comportamiento que mencionas.

Imagen de Jose Manuel

Re: Bug en NetBeans

Estoy utilizando la versión 8.0.1 de NetBeans. Realizo los pasos al pie de la letra. El bug del que mencionas ya lo había leído, pero según entendí no era un bug del IDE sino de javaws, y dicen (@Tomas Zezula) que solo con actualizar el JDK/JRE debería funcionar.
Tengo el JDK 1.8.0_25 y JRE 1.8.0_25

¿Alguna recomendación? ¿Debería buscar las versiones que indican en el Tutorial? ¿O lo debería hacer a mano?

...

¿Y ya probaste eliminando el atributo codebase ejecutando directamente el archivo jnlp? Para esto, el jar de tu aplicación debe estar en mismo directorio del jnlp. Esto es sólo para que veas si se ejecuta bien.

Idealmente, el codebase debe ser una ruta HTTPS y el JAR debe estar firmado con un certificado de una autoridad certificadora de confianza.

Más detalles al respecto en https://docs.oracle.com/javase/tutorial/deployment/webstart/deploying.html

Imagen de Jose Manuel

...

El archivo jnlp lo ejecuto hasta desde la consola, el error es el mismo. Si elimino el elemento codebase de la etiqueta sigue pasando el mismo error. Ya se que deben estar firmados por una autoridad de confianza, pero si ese fuera el caso no debería mandarme un error como en el caso de los applets (leer el inicio del post) ?

He visto que algunos utilizan Apache tomcat, lo intentare de esa manera para ver si funciona.
Saludos.

Pues qué cosa más

Pues qué cosa más extraña...

Yo tengo la misma versión de NetBeans y de Java:

java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) Client VM (build 25.20-b23, mixed mode, sharing)

P.D.: No olvides contarnos cómo te fue con Tomcat.

Imagen de Jose Manuel

Ni modo, estoy en deprecated...

No tuve suerte D: y no quedo mas remedio que regresar al applet. En Tomcat monte el jnlp pero siguió con el mismo error. Monte el applet y funciono como si nada -_-, eso si, auto firmado, y añadido a la lista de excepciones.

Imagen de paranoid_android

Probaste con localhost

Probaste con localhost
Te sugiero una prueba.
Publica tu código en un directorio de tomcat como si fuera una página web estática

Cambia las rutas a localhost algo similar a esto

<jnlp codebase="http://localhost:8080/Testing/" href="launch.jnlp" spec="1.0+">
.
.
.
<resources>
    <j2se version="1.8+"/>
    <jar href="Testing.jar" main="true"/>
  </resources>

* Nota Testing.jar lo buscaría en este directorio /Testing

En windows revisa en panel de control / java.
Habilita el log e identifica donde se está descargando la cache

Revisa si está descargando tu jar

"La mejor forma de hacer un applet es NO hacer un applet."

hahahaha maestro! tienes toda la razón. De hecho yo aprendí la lección algo tarde, cuando estaba creando mi página web tuve tantos dolores de cabeza con el java applet que desistí. Yo no soy tan paciente y tampoco tengo los conocimientos que tienen ustedes así que desistí y con tantas ofertas de páginas web gratis sin tanta necesidad de programar y de ser un experto hehehe

Olvidé mencionarte que en la

Oye, José Manuel, olvidé mencionarte que en la página de mkyong.com hay un ejemplo para obtener la dirección MAC que puede serte de utilidad. ¡Por si sirve de algo!

~~~

Imagen de chicowed

Saracristina, la cualidad mas

Saracristina, la cualidad mas importante de un buen programador es la paciencia, y en cuanto a los conocimientos nadie nace sabiendo, pero para tener buenos conocimientos se necesita estudiar y estudiar mucho, sino cumples con esas cualidades, entonces esta profesión no es para ti :)

Imagen de Jose Manuel

Ya esta implementado, a la primera oportunidad se va.

Gracias a todos por los comentarios, @paranoid_android el applet ya esta en marcha, en cuanto tenga oportunidad lo haré en JNLP.

En cuanto al ejemplo @jpaul, a mi me pidieron obtener las interfaces de red. Yo tome un ejemplo y lo adapte un poco (de una de las tantas paginas de Oracle) y me gusta mas como queda ;)

El código es mas o menos así por si a alguien le interesa;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Collections;
import java.util.Enumeration;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author JoseManuel
 */

public class EliminameDespues {
    public static void main(String args[]) {
        getMac();
    }
    static void getMac() {
        try {
            Enumeration<NetworkInterface> lista = NetworkInterface.getNetworkInterfaces();
            for (NetworkInterface ni : Collections.list(lista)) {
                if (ni.getHardwareAddress() != null && !ni.isVirtual()) {
                    System.out.println("Nombre: "+ ni.getDisplayName());
                    System.out.println("MAC: " +convertToHex(ni.getHardwareAddress()).toUpperCase());
                }
            }
        } catch (SocketException ex) {
            Logger.getLogger(EliminameDespues.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    static String convertToHex(byte [] ni) {
        StringBuilder sb = new StringBuilder(18);
        for (byte b : ni) {
            if (sb.length() > 0) {
                sb.append(':');
            }
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    }    
}

El resultado es el siguiente:

Nombre: Qualcomm Atheros AR9485WB-EG Wireless Network Adapter
MAC: 28:E3:47:45:DD:BD
Nombre: Realtek PCIe FE Family Controller
MAC: 28:D2:44:55:AC:17
Nombre: Adaptador virtual directo Wi-Fi de Microsoft
MAC: 1A:E3:47:45:DD:BD
Nombre: Dispositivo Bluetooth (Red de área personal)
MAC: 28:E3:47:46:3B:E1
Nombre: Teredo Tunneling Pseudo-Interface
MAC: 00:00:00:00:00:00:00:E0
Nombre: Adaptador ISATAP de Microsoft #9
MAC: 00:00:00:00:00:00:00:E0

Se ve mas bonito verdad? :)
Saludos y gracias de nuevo por los consejos.

¡Excelente!

¡Excelente! Sólo dos pequeñas observaciones si no te importa:

¡Por si sirve de algo!