Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Usuario Invitado

#611
Java / Re: AYUDA CON PROGRAMA EN NETBEANS
2 Febrero 2015, 19:44 PM
Lo siento mucho, pero en el foro no se hacen tareas ajenas. Cuando tengas algo de código vuelves para que te ayudemos en alguna duda específica.
#612
¿Todos los jars y .jnlp están en el directorio de tomcat?
#613
¿Has creado los archivos .jnlp para los jars?

Test.jnlp
Código (xml) [Seleccionar]
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://localhost:8080/" href="Test.jnlp">
   <information>
       <title>Prueba JNLP</title>
       <vendor>Nombre del vendor</vendor>
       <homepage href="http://localhost:8080/" />
       <description>Descripcion</description>
   </information>
   <security>
       <all-permissions/>
   </security>
   <resources>
       <!-- version de java requerida -->
       <j2se version="1.7+" />
       <!-- indica como se llama el jar -->
       <jar href="TestJnlp.jar" />
   </resources>
   <!-- Clase principal -->
   <application-desc main-class="ruta.clase.Main" />
</jnlp>


¿Qué servidor estás usando? Si estás usando apache copia el jar y su archivo descriptor .jnlp en webapps/ROOT.

Saludos.
#614
Interesante... gracias por la info.
#615
Interesante info. ¿Se puede saber de dónde vino el ataque por curiosidad?
#616
Yo no le veo lógica a esos ataques. No es un conflicto personal contra el foro o algún miembro del staff, simplemente hacen su mediocre ddos y ya. ¿Cuál es su objetivo? Ésta gente verdaderamente parece que no tuviera materia gris.

@Elektro, los latinos no tenemos por qué ofendernos por temas raciales.
#617
Foro Libre / Re: ¿Te consideras un hacker?
1 Febrero 2015, 23:45 PM
Cita de: @synthesize en  1 Febrero 2015, 23:44 PM
Eso eso. Que así los demás tenemos de sobra, jajajajajaja

¿Cuantos kilos de hierba te metes a la semana?  ;D
#618
Java / Re: Ayuda proyecto java
1 Febrero 2015, 23:05 PM
Como ya te lo han dicho, en Java las cadenas no se comparan igual como con javascript o PHP. En Java el operador "==" lo que hace es comparar referencias, y con ésto me refiero a memoria.

Aportando algo pequeño para que puedas entenderlo, en el siguiente ejemplo, la variable name es guardado en memoria con el valor "Bugs Bunny". Al comparar lo con el texto "Bugs Bunny", dará true pero no porque las cadenas sean iguales, si no porque apuntan a la misma dirección de memoria.

Código (java) [Seleccionar]
String name = "Bugs Bunny";
System.out.println(name == "Bugs Bunny")


El operador == evalúa ambos lados. name que es el texto "Bugs Bunny" (izquierda) hace referencia a la dirección 0X0FAB23D4, y "Bugs Bunny" (derecha) hace referencia a la dirección de memoria 0X0FAB23D4. Es decir, la misma dirección de memoria.

Pero si haces:

Código (java) [Seleccionar]
String name = new String("Bugs Bunny");
System.out.println(name == "Bugs Bunny");


El compilador determinará que es falso. Porque name es un objeto que engloba un texto, pero que tiene muchas otras propiedades, mientras que "Bugs Bunny" es un texto simple. Por lo tanto, no son iguales. En Java, al hacer uso de new creas una nueva instancia de dicha clase con lo que se le asigna una dirección independiente de memoria.

El método equals lo que hace es comparar el texto de dos objetos String. Por lo que, es lo más adecuado para comparar cadenas.

Salu2.

#619
Java / Re: Controlar Timeout mediante un EJB
1 Febrero 2015, 19:18 PM
Exactamente. Me captaste la idea  ;D

Para invocar al método @Timeout no es necesario invocar nada. En el momento en que registras un TimerService, el método @Timeout se invocará automáticamente cuando expire el tiempo de espera.

Otra cosa. Un TimerService tiene que ser usado en un servidor de aplicaciones ya que, éste será inyectado por medio de @Resource por el contenedor del servidor. Además creo que para usar un EJB Timer es necesario especificar si es un Bean local o remoto por medio de sus interfaces. Te dejo un ejemplo:

Interface local:
Código (java) [Seleccionar]
import javax.ejb.Local;
import javax.ejb.Timer;

@Local
public interface BeanLocal {
public void start(String name);
public void execute(Timer timer);
public void stop(String name);
}


El EJB
Código (java) [Seleccionar]
import javax.annotation.Resource;
import javax.ejb.Singleton;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerService;

@Singleton
public class TimerBean implements BeanLocal {

@Resource TimerService timer;

@Override
public void start(String name) {
boolean exists = false;
for(Timer temp : timer.getTimers()) {
if(temp.getInfo().equals(name))
exists = true;
}
if(!exists)
timer.createTimer(15000, 3000, name);
}

@Override @Timeout
public void execute(Timer timer) {
System.out.println("Método @Timeout invocado: "+timer.getInfo());
}

@Override
public void stop(String name) {
for(Timer temp : timer.getTimers()) {
if(temp.getInfo().equals(name))
temp.cancel();
}
}

}


Luego, donde uses el EJB Timer lo inyectas también:

Código (=java) [Seleccionar]
@Inject private BeanLocal myEJB;

Para registrar un TimerService, simplemente haría:

Código (=java) [Seleccionar]

myEJB.start("identificadorTimer");


Y para cancelar un TimerService:

Código (=java) [Seleccionar]
myEJB.stop("identificadorTimer");

Nota: Yo le puse @Singleton porque quería que solo exista una instancia del EJB Timer. Funciona igual con EJB Stateless y Stateful.

UPDATE

De acuerdo a la especificación de EJB 3.1, si va a ser un EJB local solamente, se puede obviar la interface @Local. Solo basta ponerle al EJB @LocalBean para indicar que es un EJB local.

Código (=java) [Seleccionar]
@LocalBean
@Singleton
public class TimerBean {
#620
Java / Re: Juego MasterMind Java necesito ayuda
1 Febrero 2015, 18:59 PM
Antes que nada, el método pedirSolución debería ser así:

Código (java) [Seleccionar]
public static char[] pedirSolucion()  {
char[] solucion = new char[4];
Scanner input = new Scanner(System.in);
System.out.println("Escriba la soluccion que crea que es correcta: ");
for (int i = 0; i < solucion.length; i++) {
solucion[i] = input.next().charAt(0);
}
return solucion;
}


Pedimos que se ingrese una línea de texto y se aplica el método charAt(0) que extrae y devuelve el primer carácter del texto ingresado. Así trabajas todo con arreglos char en lugar de que la solución sea un array String.

Bien, una vez explicado ésto, creamos un método que obtenga los aciertos completos (posición y color):

Código (java) [Seleccionar]
public Map<Integer, Character> getFullMatches(char[] key, char[] solution) {
// aciertos completos: posicion y color
Map<Integer, Character> fullMatches = new HashMap<>();
for(byte i=0; i<key.length; i++) {
if(key[i] == solution[i])
fullMatches.put(i,solution[i]);
}
       return fullMatches;
}


Map<Key, Value> es un tipo de dato que guarda valores asociados, es decir, a posición de la ficha vendría a ser la llave, y su valor el color:

Posicion: Color

Un Map, List o en su defecto Collection, trabaja con Objetos. Debes saber que cada tipo de dato primitivo (char, int, byte, double, float) tiene su Wrapper, que es una clase que engloba éstos datos, permitiéndote extender su funcionalidad al ser objetos. La JVM hace lo que se llama upcasting que es convertir un primitivo a su Wrapper. Es por ésto, que aunque el objeto Map recibe un Character, le podemos pasar un char, porque la JVM lo convertirá a Character automáticamente. Sucede lo inverso con el downcasting.

Ahora, un método para los aciertos de color, que vendrían a ser fichas descolocadas. Como no nos interesa la posición del color porque es obvio, solo guardamos el color de la ficha. Por eso en lugar de un Map, utilizamos un List, que como su nombre lo indica viene a ser una lista.

Código (java) [Seleccionar]
public List<Character> getColorMatches(char[] key, char[] solution) {
// aciertos solo de color
List<Character> colorMatches = new ArrayList<>();
for(byte i=0; i<key.length; i++) {
for(byte k=0; k<solution.length; k++) {
if(key[i] == solution[k])
colorMatches.add(solution[k]);
}
}
return colorMatches;
}


Ahora sólo comprobamos si hay aciertos completos y de colores solamente. Para ésto, primero verificamos que el objeto Map devuelto por los métodos anteriores no esté vacío. Si lo está quiere decir que no se han encontrado aciertos.
Código (java) [Seleccionar]

// comprobamos si hay aciertos completos
if(!getFullMatches().isEmpty()) {
System.out.println("Se han encontrado aciertos completos: \n");
for (Map.Entry<String, String> entry : getFullMatches().entrySet()) {
System.out.println("Posición: "+entry.getKey() + " | Color: " + entry.getValue());
}


}

// comprobamos fichas descolocadas (aciertos de color)
if(!getColorMatches().isEmpty()) {
System.out.println("Se han encontrado fichas descolocadas: \n");
for (Character c : getColorMatches()) {
System.out.println("Color de la ficha: " + c);
}
}


Quizás te resulte un poco complejo pero no lo es. Si tienes dudas de algún método, nada mejor como ver la documentación del mismo en la API de Java (la encuentras en Google  ;)). Salu2!