elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: [1]
1  Programación / Java / Re: ayuda urgente: combinacion de teclas con la clase robot en: 11 Diciembre 2009, 14:36 pm
No lo hice nunca, no se que pasará cuando sobreescribis las combinaciones de teclas del sistema operativo, pero algo que se me ocurre rápido para un caso general es usar alguna variable de control.

Con keylistener podes capturar cuando esta presionando una tecla (keypressed) y  cuando la suelta (keyreleased)
Si presiona CTRL, pones la variable de control en 1
Si presiona ALT y la variable está en 1 pones la variable de control en 2
Si presiona DEL y la variable de control esta en 2, pones la variable de control en 3.
Si suelta alguna de las teclas (keyreleased), pones la variable de control a 0.

Luego solo es revisar si la variable de control llega a 3 en algún momento.

Si hay alguna clase que ya automatiza esto no se, pero lo podrías hacer así tranquilamente.
2  Programación / Java / Re: extraer las presentaciones de un archivo de power point en java en: 11 Diciembre 2009, 14:27 pm
Revisá estos enlaces:

PPT:
http://www.powerml.com/powerml-pro/doc/index.jsp
http://poi.apache.org/

PDF:
http://www.coderanch.com/t/322413/Java-General/java/Parsing-PDF
http://pdfbox.apache.org/
http://www.jguru.com/faq/view.jsp?EID=1074237
3  Programación / Java / Re: ConcurrentModificationException en: 11 Diciembre 2009, 01:06 am
Si el problema era ese, encontré la solución acá:

http://www.coderanch.com/t/233932/Threads-Synchronization/java/deal-with-Concurrent-Modification-Exception

http://www.javalobby.org/java/forums/t76297.html

Seguí esos tips y funcionó todo correctamente!

Estaba usando bien el syncronized, pero tenia que eliminar con el remove del iterador ademas de sincronizarlo.

Desde ya, gracias por la ayuda L-EYER y Casidiablo.
4  Programación / Java / Re: ConcurrentModificationException en: 11 Diciembre 2009, 00:46 am
El unico que llama a checkColisiones() es GUI_Principal. Nivel nunca lo llama

Creo q  el error se produce por que cuando checkColisiones esta recorriendo/modificando la lista cMalos, hay otro hilo que la esta iterando. Puede ser?
5  Programación / Java / Re: ConcurrentModificationException en: 10 Diciembre 2009, 23:47 pm
Sinceramente estoy estancado, no encuentro solución. He puesto y sacado syncronized por todos lados ya ^^

Pongo los fragamentos de código de las clases involucradas en el error, no pongo las clases completas por que son cientos de líneas.  No quería recurrir a esto de ponerles el código ya que el trabajo de debuggear es mío, pero ya estoy frustado xD

El error
Código:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.LinkedList$ListItr.checkForComodification(Unknown Source)
at java.util.LinkedList$ListItr.next(Unknown Source)
at juego.Nivel.checkColisiones(Nivel.java:165)
at frontend.GUI_Principal.chekearColisiones(GUI_Principal.java:396)
at frontend.GUI_Principal.game(GUI_Principal.java:378)
at frontend.GUI_Principal.main(GUI_Principal.java:401)

Ahora el codigo de clases, les marco las lineas q indica el error
Código
  1.  
  2. public class Nivel {
  3. protected java.util.LinkedList<Malo> cMalos;
  4.  
  5. /**
  6. * Retorna la lista de malos del nivel
  7. * @return
  8. */
  9. public LinkedList<Malo> getMalos(){
  10. return cMalos;
  11. }
  12.  
  13.  
  14. /**
  15. * Retorna la celda x,y
  16. * @param x
  17. * @param y
  18. * @return
  19. */
  20. public Celda getCelda(int x, int y)
  21. {
  22. return tablero[x][y];
  23. }
  24.  
  25. /**
  26. * Chekea colisiones en la celda (x,y)
  27. * @param x
  28. * @param y
  29. */
  30. public void checkColisiones(int x, int y) {
  31. Celda celdaAux = getCelda(x,y);
  32.  
  33.  
  34. //Colsion Malo - Fuego
  35. //(LINEA 165)
  36.                 if(celdaAux.getMalos()!= null && celdaAux.getFuego() == true){
  37. for(Malo m : celdaAux.getMalos()){
  38. m.matar(getBomberman(1));
  39. celdaAux.removeMalo(m);
  40. celdaAux.setfueModificada(true);
  41. }
  42. }
  43.       }
  44.  
  45.  
  46. }
  47.  

Código
  1. public class GUI_Principal extends Canvas implements KeyListener{
  2.  
  3. /**
  4. * Ciclo del juego
  5. */
  6. public void game() {
  7. Graphics g = this.getGraphics();
  8. inicializar();
  9. //Input de teclado
  10. addKeyListener(this);
  11. timer.start();
  12. while (isVisible() && !b.getMurio()) {
  13. chekearColisiones();
  14. paintTablero();
  15. jLabel2.setText(Integer.toString(b.getScore()));
  16. jLabel4.setText(timer.getResult());
  17. g.drawImage(buffer, 0, 0, this);
  18. try {
  19. Thread.sleep(b.getVel());
  20. } catch (InterruptedException e) {}
  21. }
  22. System.out.println("te moriste pete");
  23. }
  24.  
  25. /**
  26. * Chekea las colisiones en todas las celdas de la matriz
  27. */
  28. private  void chekearColisiones() {
  29. for(int i=0;i<n.matriz_width;i++)
  30. for(int j=0;j<n.matriz_height;j++)
  31. //LINEA 396
  32.                                 n.checkColisiones(i, j);
  33. }
  34.  
  35. public static void main(String[] args) {
  36. GUI_Principal gui = new GUI_Principal();
  37. gui.game();
  38. }
  39. }
  40.  
6  Programación / Java / Re: ConcurrentModificationException en: 10 Diciembre 2009, 18:48 pm
He leído lo que me dejaste, pero sigo sin poder solucionar el problema.

La excepción que se produce es la siguiente

Código:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.LinkedList$ListItr.checkForComodification(Unknown Source)
at java.util.LinkedList$ListItr.next(Unknown Source)
at juego.Nivel.checkColisiones(Nivel.java:164)
at frontend.GUI_Principal.chekearColisiones(GUI_Principal.java:341)
at frontend.GUI_Principal.game(GUI_Principal.java:325)
at frontend.GUI_Principal.main(GUI_Principal.java:346)

Por esto entiendo que, cuando la clase Nivel quiso acceder al método checkColisiones() se produjo el error por que ya había un objeto GUI_Principal, accediendo a este por medio de la llamada chekearColisiones().

Como debería aplicar el syncronized? Destaco que nivel, no tiene una referencia al unico objeto del tipo GUI_Principal que hay en ejecución
7  Programación / Java / ConcurrentModificationException en: 10 Diciembre 2009, 15:22 pm
Bueno estoy teniendo un problema al modifcar una lista, me está tirando un error de concurrencia (java.util.ConcurrentModificationException)

El bloque de código que genera problema, es el siguiente

Código
  1. if(celdaAux.getMalos()!= null && celdaAux.getFuego() == true){
  2. for(Malo m : celdaAux.getMalos()){
  3. m.matar(getBomberman(1));
  4. celdaAux.removeMalo(m);
  5. celdaAux.setfueModificada(true);
  6. }
  7.  
  8.  

Investigué un poco, y encontré que el problema se da por que estoy eliminando elementos de una lista mientras estoy iterando sobre la misma.
Una solución a esto es usando el remove del iterador. No me funcionó
Y otra usando un bloque syncronized(){...}, pero no sé como aplicarlo
8  Programación / Java / Re: MI EXAMEN en: 8 Diciembre 2009, 21:14 pm
Te resuelvo el primero, para que tengas algun ejemplo de donde partir. Recuerda siemrpe buscar el caso base, y el caso general, para poder plantear la recursión.

1)
Código
  1. public void imprimir(int n){
  2.        if(n==0)
  3.         System.out.println(" Termino la ejecución");
  4.        else{
  5.               System.out.print("*");
  6.               imprimir(n-1);
  7.        }
  8.  

Por lo visto no sabes recursividad, te recomendaría que leas bibliografía al respecto, generalmente es un tema que le cuesta bastante a los que se inician en programación.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines