✅✅ ✅ ✅ ✅ Todos mis cursos gratuitos 👉 www.pildorasinformaticas.es ✅✅ ✅ ✅ ✅ 🚀 ¿Quieres ejercicios? ¿Quieres más temario? 👉 www.pildorasinformaticas.es/course/java-tutorizado/🚀 🚀 ¿Quieres que te resuelva las dudas de Java? 👉 www.pildorasinformaticas.es/course/java-tutorizado/ 🚀 💥💥💥 Siempre seguiré subiendo cursos gratuitos por aquí. Gracias a todos por seguirme. 💥💥💥
He pagado cursos de java en un instituto..y nunca aprendi nada...en menos de 30 minutos de un video aprendi muchas cosas..eres lo mejor que he visto explicado un tema muy concreto..
Okey maestro Juan Gómez... Lo que falta ahora es un curso de Spring Framework, de Hibernate, de Maven en Java, sería bueno que tú Juan nos enseñes cómo usar esos frameworks, saludos desde Lima, Perú
Creo que escribo por muchos, y enserio agradezco mucho tu forma de explicar, creí que era un tema mas complicado pero con tu explicación me quedo super claro, eres grande Amigo!
No te puedes hacer una idea de lo agradecido que estoy de tus tutoriales y explicaciones y lo que me han ayudado en mis estudios, muchas gracias por tu trabajo.
Este vídeo, como otros que he visto de tu canal, B-U-E-N-I-S-I-M-O. Personalmente he de informarte de que para mi los hilos formaban parte de esa parte de la programación digamos con caracter cercano a lo paranormal, que ni lo podia concebir, vamos. Pero gracias a este vídeo, he puesto un pie en el mundo de los hilos, por fin. Nunca te lo agradeceré lo suficiente.
Profesor no sabe cuanto le agradezco estos vídeos he aprendido mucho con usted, en forma de pago también estoy difundiendo su excelente canal,se lo merece.
Gracias por tu excelente curso de JAVA, contigo e aprendido muchísimo mas de lo que e aprendido en la universidad. Es increíble ver que durante el primer año de carrera no te enseñan ni a programar una simple ventana. E mejorado mucho gracias a ti.
Increíble todo el tiempo y la dedicación en cada uno de los mas de 270 vídeos. Estoy muy agradecido de todo el conocimiento compartido. Tu trabajo me inspira a seguir aprendiendo y a mejorar cada día, un cordial saludo desde Santiago de Chile.
El curso es muy bueno, eres sin duda el que mejor he visto que lo explique; pero habría que hacer varios apuntes: 1- No has explicado que al implementar cada hilo se mueven las pelotas, pero la aplicación se cierra en el momento porque el que actúa es el hilo principal, que sigue en ejecución esperando eventos. 2- Existe la posibilidad de crear una clase que en lugar de Runnable extienda de Thread y así nos evitamos algunos pasos intermedios. 3- Habría que aclarar y repetir, que el hilo se crea al crear la instancia, con el método start() se inicia, y ejecuta el método run(), que es el que lo dota de funcionalidad. Son aspectos que se pueden confundir. Son apuntes que a nivel conceptual, entiendo que son importantes. Gracias por tu trabajo titánico durante el desarrollo de este curso tan extenso y tan bueno.
Buen video, tenía unos años de no ver Java dado que me enfoqué en lenguajes web y cms pero con ver este video, logré recordar aspectos de JPanel, JFrame que se hacen a pata y no usando la paleta del Eclipse o NetBeans y poco a poco fui recordando el tema de los hilos, se que me falta recordar pero viendo los otros videos del canal iré recordando dichos aspectos, saludos
gracias profesor. Me partí un poco el coco en este video hasta que lo comprendí. Comento para que sepa que no lo he abandonado xD y que estaré eternamente agradecido con usted. Saludos!
Uhh! Qué buen tema! Ya llegamos a ésta parte que es clave! Cómo me esta abriendo la cabeza Java! La explicación no puede ser mejor ni mas gráfica! una joya! Muchas gracias de nuevo!!!! Abrazo, Leopoldo.
pildorasinformaticas muy buen curso a mi me está ayudando un montón con un proyecto que debo entregar la verdad que es uno de los pocos cursos que encontre que explica tan bien...quería preguntarle profesor si puedo hacer unas consultas via email o por mensajeria...pues debo terminar un video juego el tiempo me apremia el video de hilos me ayudo un monton..pero estoy un poco atascada...bueno espero su respuesta saludos...Romina
Puedes hacer las consultas que quieras por este mismo medio o por mail a la dirección cursos@pildorasinformaticas.es Las dudas que me llegan por mail tardo en contestar. Recibo cientos de mails al día. Un saludo
pildorasinformaticas Gracias por contestar..tengo que hacer un video juego...ya tengo la parte inicial en donde uno selecciona a que video juego quiere entrar, eso barbarbo, se apaga y se prendre el sonido...ahora en donde no puedo seguir es en la pantalla del juego es decir el fondo que se mueva, simular un corrimiento de camara....(no se si me explico) y el personaje con el teclado...esto último lo estoy intentando con lo que publicaste último...si me podes dar una orientación desde ya más que agradecida....saludos (reitero muy buen curso)
Bravo!! Ando en búsqueda de como crear un hilo de tipo demonio pero este video me sirvió para entender la base de su funcionamiento. En verdad se agradece, video muy bien explicado, lastima no haberlo encontrado antes! Saludos!
Las pelotas a mi se me veían entrecortadas cuando le daba al botón "Dale!". No se si es porque soy usuario de Linux pero di con una solución buscando en internet. Lo que hay que hacer es ir al método paintComponent(Graphics g) y colocar dentro el método revalidate() para que la ventana siempre se revalide (es como si estuviéramos moviendo el mouse sobre la ventana). El resultado de esto es que se ve la pelota con un movimiento más fluido y sin que se vea entrecortado. Gracias por este maravilloso curso! sigue así :D
El problema de la excepcion ConcurrentModificationException que sale cuando pulsas en "Dale" varias veces, es porque se llama al metodo add de la clase LaminaPelota mientras el bucle for del metodo paintComponent está a medias. Una forma de evitarlo es sustitur la lista ArrayList por una lista CopyOnWriteArrayList que es válida para concurrencia. Aunque en este caso concreto quizá es más eficiente sustituir el bucle for-each por un bucle for tradicional. Asi nos evitamos el uso del iterador interno del for-each que es el que provoca la excepción. Esto se puede hacer porque no tenemos borrados de elementos de forma concurrente, solo inserciones (add), y no nos importa que un paint que esta a medias no mueste el ultimo elemento que se acaba de añadir en un add de forma concurrente, ya lo mostrara en el siguiente paint 4 milisegundos más tarde.
brutal vídeo colega, la verdad apesar de que llevo ya un buen tiempo en el mundo de la programacion, era un poco escéptico al tema de los hilos y no me quedaba totalmente clara su motivo, pero con este video me ha quedado clarisimo. Sin duda alguna me sucribo y like sin dudarlo, sigue asi
El parpadeo mejora enormemente sincronizando los gráficos al final de paint(): public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2=(Graphics2D)g; for(Pelota b: pelotas){ g2.fill(b.getShape()); } // Asegura que el objeto gráfico se actualiza Toolkit.getDefaultToolkit().sync(); }
Que tal mi estimado Juan¡ Antes que nada permiteme enviarte mis felicitaciones por este curso. Es excelente y lo sigo puntualmente¡ Mi preocupación es si vas a continuar con los videos ya que me gustaría mucho continuar hasta la totalidad del curso. Saludos desde México.! un abrazo.
Arturo Guerrero Hola !! Por supuesto que voy a continuar. De hecho el último vídeo subido es de hace 4 días y si te fijas en las fechas de los vídeos verás que subo un mínimo de dos a la semana y en muchas ocasiones más. Un saludo
Gracias a ti aprobé el examen de Programación. Muchas gracias por el video ^^ PD: Las coordenadas X e Y las he puesto Ramdom para que me salgan en sitios difetentes así queda más chulo jejeje Salu2
Aunque estaba esperando los videos de concurrencia, me hubieran gustado más de genéricos, porque el tema me da algunos problemas todavía. Aun así, excelente video.
Estaba intentando hacer lo mismo que tu, pero me ha salido otra cosa diferente pero muy curiosa y graciosa al mismo tiempo espero que les guste y aprendan un poco mas de java con el ejemplo..... import javax.swing.*; import java.awt.*; import java.awt.event.*; public class PracticandoConJava extends JFrame{ public static void main(String[] args) { new PracticandoConJava(); } public PracticandoConJava(){ setTitle("Practicas GRaficas"); setDefaultCloseOperation(3); setBounds(10, 10, MarG1, MarG2); setVisible(true); LaminaNorte lanorte= new LaminaNorte(); add(lanorte,BorderLayout.NORTH); lanorte.add(BotonStop); lanorte.add(BotonLimpiar); lanorte.add(jbola); lanorte.add(jlinea); lanorte.add(jtexto); BotonStop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { thread.stop();parar=false;}}); BotonLimpiar.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { repaint(); }}); jlinea.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { bola=false;string=false; }}); jbola.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { bola=true;string=false; }}); jtexto.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { string=true;bola=true; }}); add(new LamainaSur(),BorderLayout.SOUTH); add(new RodarEvento(), BorderLayout.CENTER); } class RodarEvento extends JComponent{ public RodarEvento(){ this.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e){ //Se ejecuta cuando pulsas el mouse sobre la lamina System.out.println("EventoCargado"); parar=true; colores++; ancho= e.getX(); largo=e.getY(); Runnable arrancar= new eventosHilos(); //Instanciamos nuestra clase para poder ejecutarla varias veces... thread = new Thread(arrancar); // Instanciamos la clsase Thread y creamos una variable que alojara un objeto de tipo Runnable thread.start(); // Finalizamos poniendo a nuestra variable thread un metodo de inicio llamado start(). }}); this.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { //Se ejecuta cuando arrastras el mouse haciendo un efecto a la linea de pintado ancho= e.getX(); largo=e.getY(); paint(getGraphics()); }}); } public void paint(Graphics g){ Graphics2D drawD2 = (Graphics2D)g; if (colores==1){ drawD2.setColor(Color.BLUE); }if (colores==2){ drawD2.setColor(Color.RED); }if (colores==3){ drawD2.setColor(Color.ORANGE); }if (colores==4){ drawD2.setColor(Color.BLACK); }if (colores==5){ drawD2.setColor(Color.GREEN); }if (colores==6)colores=0; drawD2.setStroke(new BasicStroke(5)); if (string){ drawD2.drawString("PildorasInformaticas", ancho, largo); }else drawD2.drawOval(ancho, largo, 2, 2); } class eventosHilos implements Runnable{ @Override public void run() { if (largo>1 || ancho>1){ while (parar){ if (largo==0){ entra1=true;entra3=false;} if (ancho==0){ entra2=true;entra4=false; } if (largo==MarG2-100){ entra3=true;entra1=false; } if (ancho==MarG1-20){ entra4=true;entra2=false; } if (entra1){ largo++; } if (entra2){ ancho++; } if (entra3){ largo--; } if (entra4){ ancho--; } if (bola){repaint();} paint(getGraphics()); try { Thread.sleep(velocidad); } catch (InterruptedException error) { error.printStackTrace(); } System.out.println(largo+" "+ ancho); } } } } } class LamainaSur extends JPanel{ public LamainaSur(){ texto1.setForeground(Color.BLUE); add(texto1); setBackground(Color.ORANGE); } } class LaminaNorte extends JPanel{ public LaminaNorte(){ add(texto); setBackground(Color.GREEN); } } JButton BotonStop=new JButton("!Parar!"); JButton BotonLimpiar=new JButton("Limpiar"); JButton jbola=new JButton("Bola"); JButton jlinea= new JButton("Linea"); JButton jtexto=new JButton("Texto"); Thread thread; int velocidad=10; int bucle=20000; int colores=0; int MarG1=521; int MarG2=552; boolean parar=true; boolean entra1=true; boolean entra2=true; boolean entra3,entra4; boolean bola; boolean string=false; int ancho=-10; int largo=-10; JLabel texto= new JLabel("Botones..."); JLabel texto1= new JLabel("Pulsa en la lamina central, cuantas mas veces pulsas mas rapido se mueve"); }
Amigo excelente vídeo en serio, todos los vídeos que tenés son increibles. Sabés que seria genial, que tus vídeos se pudieran descargar, es decir, que subieras un enlace para poder tenerlos en el ordenador. Lo dificil es que son muchos vídeos y ocuparía mucho. Pero regresando a la intro, excelentes vídeos, seguí así.
No entendí por qué si implementaste lo de hilos en el botón dale, pudiste salir sin problemas usando el otro botón al final. De ahí en fuera fue un gran video, gracias.
Excelentes vídeos profesor, sin duda me han servido muchísimo. He topado con la suerte de tener buenos profesores en la universidad, pero usted, es igual a ellos, incluso podría decirle que es mejor, definitivamente estoy muy agradecido con su contenido, muchas gracias por dedicar su tiempo. Estoy intentando desarrollar un Snake, un profesor de la universidad me indicó que después de Programación I tengo que estudiar dos temas esenciales de POO, por dicha ya había visto una buena parte de sus vídeos, ahora estoy estudiando la clase ArrayList y también este tema, Threads. Tengo una duda con el código fuente y es que no estoy muy ubicado porque no observé el vídeo explicativo de las animaciones en general, si usted sabe cuál es el vídeo o los vídeos le agradecería montones si lo menciona, igualmente, si el público en general sabe en cuál sección del PlayList se encuentra, estaría muy agradecido por su apoyo, muchas gracias nuevamente.
Juan, aqui es donde me parece que tu paciencia se estaba agotando....jaja...review review review.....Saludos! Excelente tu trabajo pero aca dimos un salto gigante....ABZ
Voy a dejar esto por aquí por si a alguien más le pasa. Resulta que yo no veía nunca la pelota demasiado rápida, solo podía ir más lenta pero no tan rápida como para no poder seguirla con los ojos. Se debía a que uso un limitador de fotogramas en el panel de control de Nvidia a 60fps en la "Configuración global", para videojuegos básicamente. Al desactivarlo y sin hacer uso de sleep(), vuelve a ir tan rápido como puede.
Hermano mio, te mereces un monton de gracias por la metodologia de enseñanza y tus conocimientos, te enviaré una implementación de la interface "TableModel" (CRUD para cualquier tabla de postgreSQL) que hice hace varios años, para que la analices y expliques a todos con detenimiento. me puedes dar una via para enviartela o donde publicarla en tu sitio????
Muy Buenos tus viedos! Pero nocesito correr varios algoritmo para mostrar cual es el mas eficiente. ya sea exponencial, loritmo, cuadratico, etc. Como genero diferentes ventanas y que se ejejuten a la vez dado un velor de entrada.
Hola, quiero hacer una aclaración pequeña... El hecho de que se ejecute concurrentemente en realidad no significa que sea a la vez... El procesador puede ejecutar simultaneamente tantas tareas como núcleos tenga... pero un CPU (es decir, un núcleo) puede ejecutar solo una tarea a la vez... el hecho de que las tareas de la cola de listos se ejecuten de forma concurrente implica que si bien se ejecutan de una tarea a la vez, el procesador va desarrollando las tareas de tal forma que da la sensación de que se ejecutaran a la vez...
Hola profesor y companeros! Ante todo quisiera agradecerle por todo. Tengo una pregunta fundamental, acerca del curso de JAVA (primer curso que hice bajo pildorasinformaticas y soy totalmente novato). Estoy por el Vídeo 169, en donde es allí donde necesito saber donde estoy parado, (ya que el ejercicio de pelota rebotando me bolo la cabeza), y ahora, quiero empezar a hacer ejercicios, porque después de ver tantos videos, necesito comenzar por hacer otros ejercicios, pero no se de que sitio web (porque hay miles), o que libro me puede recomendar para arrancar con buenas raíces. Muchas gracias como siempre!!
Hola buenas no se si la pregunta pueda ser contestada... pero me surgio un error al abrir el codigo en eclipse del archivo de descarga relacionado con UTF-8 que en lugar de acentos muestra un signo de interrogación dentro de un rombo y otros simbolos raros en los comentarios que llevan ñ.. hay alguna manera de configurar eclipse para que no pase esto ? Saludos y sigo con tu cursos Juan que son geniales se aprende mucho en este canal
Muy comprensible todo, de gran ayuda. El hecho de que el programa pete al ejecutar muchos hilos podría tener que ver con la capacidad o número de hilos que tiene tu procesador? o al correr todo en la JVM no tiene nada que ver?
El problema de la excepcion ConcurrentModificationException que sale cuando pulsas en "Dale" varias veces, es porque se llama al metodo add de la clase LaminaPelota mientras el bucle for del metodo paintComponent está a medias. Una forma de evitarlo es sustitur la lista ArrayList por una lista CopyOnWriteArrayList que es válida para concurrencia. Aunque en este caso concreto quizá es más eficiente sustituir el bucle for-each por un bucle for tradicional. Asi nos evitamos el uso del iterador interno del for-each que es el que provoca la excepción. Esto se puede hacer porque no tenemos borrados de elementos de forma concurrente, solo inserciones (add), y no nos importa que un paint que esta a medias no mueste el ultimo elemento que se acaba de añadir en un add de forma concurrente, ya lo mostrara en el siguiente paint 4 milisegundos más tarde.
Muy bueno pero tengo una pregunta, porque el método salir funciona? Si has metido los hilos solo a la hora de generar pelotas como es que esa función es accesible? Gracias
Ten una duda espero me puedas responder En tus videos no recuerdo si lo vi o no voy en el 168, Tienes el tema de ejecutar aplicaciones en segundo plano Me refiero a que si está en segundo plano la aplicación siga funcionando y no se detenga
Hola !! Eso corresponde al tema de los Threads. Efectivamente comienza en el vídeo 168 : ruclips.net/video/qXhc4wbDaqU/видео.html Y sucesivos. Un saludo!!
Hola. gracias por su video; se aprende muchisimo con usted, pero tengo una pregunta y es por que le paso pelota y lamina como parametros al constructor de la clase que implementa la interfaz Runnable? le agradezco una respuesta.
+Johan Fonseca Sanchez Dime por favor minuto y segundo del vídeo donde aparece en el código lo que mencionas, y te responderé a la pregunta. Un saludo!!
private static final int tamX = 15, tamY = 15; private double x = 0, y = 0 double dx = 1, dy = 1; ¿Qué tall si agrupamos las variables de class con el objetivo de reducir código?
saludos Juan, este ejercicio lo hice en su epoca con tus instrucciones pero se me perdio, el link de la descripción se encuentra malo, es posible que lo vuelvan a montar? o algún alumno colega me lo puede suministrar. saludos cordiales
Una pregunta, si tengo una clase Coche de la cual creo y defino los objetos, y la llamo desde otra CocheTest usando el extends para poder hacer un super de sus atributos y realizar los set y get y ademas implemento desde esa misma clase el runnable aplicando el run esta bien hecho?
Hola buenas noches este es un tema que siempre e querido aprender gracias por enseñarlo, tengo una duda que se sale del tema recuerdo en los primeros videos que un boton los ponias a la escucha por medio de la interfaz ActionListener pero en este caso a esa pelota como la pondria a la escucha digamos que si doy clic sobre ella que se cierre el programa Espero su respuesta Gracias por todo
Hola que tal!Tengo algunas dudas a ver si es posible resolverlas(sobre el programa multihilos del video).No logro entender como se añade a la laminas la(s) pelota(s), si al llamar al metodo "lamina.add(pelota)"desde el metodo "comienza_el_juego" de la clase MarcoRebote, la logica me dice que lo que hace es añadir las pelotas al arraylist que hay de la clase LaminaPelota, ya que en el metodo "addd(Pelota b)" de la clase LaminaPelota entiendo que con la instruccion "pelotas.add(b)" al ser "pelotas" un arrayList lo que hace ese metodo al llamarlo es añadir las pelotas al arrayList ,y no añadirlas a la lamina como se comenta en el video(sé que estoy equivocado pero no se por qué). O es que se supone que añ añadir las pelotas al arraylist ya estoy añadiendolas a la lamina?No lo acabo de entenderOtra duda es: Si el hilo que minimiza o cierra el marco(sería el del main) o el del boton "cerrar" no está dentro del metoComo puesto entonces cerrar la aplicacion mientras se está ejecutando?Sé que la respuesta es muy basica pero tampoco entiendo esa parte.Y por último: ¿Lalinea "componente.paint(componente.getGraphics())" dentro del bucle for en la clase PelotaHilos llama al metodo "public void paintComponent(Graphics g)" de la clase LaminaPelota, y esto es lo que va pintando constanstemente la lamina?Muchisimas gracias y saludos!!!
+Carl Bacchus Luis Hola !! Vamos por partes: "No logro entender como se añade a la laminas la(s) pelota(s), ..........". Respuesta: La clase LaminaPelotas tiene un método paintComponent en el cual pintamos pelotas con el método fill de la clase Graphics. Si después agregamos la lámina al marco, ya tenemos un marco con una pelota dibujada. Si además metemos la instrucción en un bucle como hacemos másadelante, ya tenemos varias pelotas. "Si el hilo que minimiza o cierra el marco(sería el del main) o el del boton "cerrar" no está dentro del metoComo puesto entonces cerrar la aplicacion mientras se está ejecutando?......" Respuesta: He leído varias veces la pregunta pero no logro entenderla. ¿Podrías redactarlo e otra forma? "Y por último: ¿Lalinea "componente.paint(componente.getGraphics())" dentro del bucle for en la clase PelotaHilos llama al metodo "public void paintComponent(Graphics g)" de la clase LaminaPelota, y esto es lo que va pintando constanstemente la lamina?" Respuesta: Correcto. Y esto responde en gran medida a tu primera pregunta. Un saludo
+pildorasinformaticas Gracias por la respuesta tan rápida y clara, lo he entendido(yo lo había planteado mal, pensando que había que añadir las pelotas a la lamina, como por ejemplo se hace con un botón, o con una lamina que añades a otra lamina o marco) Sobre la pregunta que no se entiende, volviéndola a leer yo tampoco la he entendido :P A ver si soy capaz de hacerla que se entienda: Sé que dentro del método “run” se pone el código correspondiente a las tareas que sean simultaneas, entonces como cerrar/minimizar el marco (“setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);”)o salir del programa(gracias a “System.exit(0);” en el botón de Salir) entiendo que tambien son hilos pensaba que también se tendría que poner dentro del método run, o llamar desde ahí. Sé que no es así porque el video me lo demuestra, pero quisiera saber por qué mi planteamiento es erróneo(Pensaba que era así porque en el primer programa hecho sin Threads no se podía cerrar el marco hasta que la bola parase) Sé cómo se debe hacer(he aprendido gracias a ti) pero quisiera saber el por qué de las cosas, es la mejor manera de aprender(por eso, entre otros motivos, me encantan tus videos, porque explicas todo muy claramente y detalladamente)
Duda, cuando crea la lamina, ahi ya tiene un hilo, es el hilo principal es el mismo que cierra la aplicacion, y al pulsar el boton "Dale!" se crean nuevos hilos, es asi o me equivoco. saludos, excelentes cursos :).
me crea una duda, al no estar el código de salir en el metodo run() solo se podría salir cuando el hilo principal acabe? muy bueno el curso de lo mejor de youtube, hay muchisimo trabajo detrás de estos videos. me alegro mucho que la gente sepa valorarlo. un saludo. muchas gracias
Buenas. yo me acabo de descargar al archivo pero el programa no se ejecuta como debe. Puede ser haya algo desactualizado y por eso no funciona bien? gracias
en otras palabras. me está diciendo de que la utilización de los bucles sin threads en una aplicación es inviable ?. porque claramente se puede crear una segunda pelota, si agregara un evento listener y que instancie objetos en una array
+Johan Fonseca Sanchez Pues no lo recuerdo. Tengo 195 vídeos en este curso y 719 en todo el canal. Me resulta imposible donde comenté una cosa u otra. Te paso la lista de reproducción para que lo busques tú si te sientes con ganas: ruclips.net/p/PLU8oAlHdN5BktAXdEVCLUYzvDyqRQJ2lk Un saludo
Sí, claro que sirve.... La necesidad surge cuando uno programa no una, sino muchas aplicaciones que manejan Threads. Entonces es cuando surgen los conflictos y donde entran en juego los conceptos que tú mencionas. En este curso no se ve ningún ejemplo donde se necesiten, pero es que se ven solo dos o tres ejemplos. Me gustaría abarcar más temas pero entonces el curso se me va a los 500 vídeos. Un saludo!!
Hola. Lo miré 4 veces y sigo sin entender. La implementación está sólo enfocada en ese código, no se explica en términos generales cómo se usa. Hubiese sido interesante que lo explicaras con un ejemplo más sencillo y que también lo hubieses explicado genéricamente. Aún así tus otros videos fueron útiles. xD Saludos.
✅✅ ✅ ✅ ✅ Todos mis cursos gratuitos 👉 www.pildorasinformaticas.es ✅✅ ✅ ✅ ✅
🚀 ¿Quieres ejercicios? ¿Quieres más temario? 👉 www.pildorasinformaticas.es/course/java-tutorizado/🚀
🚀 ¿Quieres que te resuelva las dudas de Java? 👉 www.pildorasinformaticas.es/course/java-tutorizado/ 🚀
💥💥💥 Siempre seguiré subiendo cursos gratuitos por aquí. Gracias a todos por seguirme. 💥💥💥
He pagado cursos de java en un instituto..y nunca aprendi nada...en menos de 30 minutos de un video aprendi muchas cosas..eres lo mejor que he visto explicado un tema muy concreto..
Muchas gracias por el comentario. Me alegro de que te gusten los vídeos. Un cordial saludo!!
Okey maestro Juan Gómez... Lo que falta ahora es un curso de Spring Framework, de Hibernate, de Maven en Java, sería bueno que tú Juan nos enseñes cómo usar esos frameworks, saludos desde Lima, Perú
Creo que escribo por muchos, y enserio agradezco mucho tu forma de explicar, creí que era un tema mas complicado pero con tu explicación me quedo super claro, eres grande Amigo!
No te puedes hacer una idea de lo agradecido que estoy de tus tutoriales y explicaciones y lo que me han ayudado en mis estudios, muchas gracias por tu trabajo.
Me alegro!! Gracias por seguir mis vídeos. Un saludo
¡¡¡¡¡....168 videos...!!!!! Gracias por tomarte el tiempo y la paciencia al compartir tus conocimientos.
Me has salvado la vida, tengo este viernes un examen de hilos y lo estoy entendiendo todo muy bien
Gracias Juan.
Este vídeo, como otros que he visto de tu canal, B-U-E-N-I-S-I-M-O. Personalmente he de informarte de que para mi los hilos formaban parte de esa parte de la programación digamos con caracter cercano a lo paranormal, que ni lo podia concebir, vamos. Pero gracias a este vídeo, he puesto un pie en el mundo de los hilos, por fin. Nunca te lo agradeceré lo suficiente.
Solo puedo decir wow, es un curso excelente, me da tristeza no haber entrado antes a sus vídeos, mis felicitaciones!
Profesor no sabe cuanto le agradezco estos vídeos he aprendido mucho con usted, en forma de pago también estoy difundiendo su excelente canal,se lo merece.
+Easylisimo Gracias por tu comentario. Me alegro de que te guste. Un saludo
Gracias por tu excelente curso de JAVA, contigo e aprendido muchísimo mas de lo que e aprendido en la universidad. Es increíble ver que durante el primer año de carrera no te enseñan ni a programar una simple ventana. E mejorado mucho gracias a ti.
+Oscar Antonio Rubí Ramírez Gracias !! me alegro de que el curso haya sido de utilidad. Un saludo
Increíble todo el tiempo y la dedicación en cada uno de los mas de 270 vídeos.
Estoy muy agradecido de todo el conocimiento compartido.
Tu trabajo me inspira a seguir aprendiendo y a mejorar cada día, un cordial saludo desde Santiago de Chile.
Que buen ejemplo. Los años que he querido saber esto. Increíble Juan, 100% agradecido.
Gracias por el comentario. Me alegro de que te guste. Un saludo!
finalice la primer parte del curso en 4 meses, excelente trabajo sr. Juan !
Me he tenido que reír en el minuto 15, qué grande eres Juan... tienes un don para enseñar que lo sepas.
Ya había visto estos vídeos, pero ahora quiero hacer mover figuras geométricas,y nada mejor q tener teoría clara y precisa para este tema.
Muchisimas gracias por compartir tanto conocimiento, llevo como 100 videos y todos excelentes. Muchas gracias.
Muchas gracias por compartir tus conocimientos Juan. Me han ayudado mucho tanto en las clases como en el trabajo. Un abrazo
El curso es muy bueno, eres sin duda el que mejor he visto que lo explique; pero habría que hacer varios apuntes:
1- No has explicado que al implementar cada hilo se mueven las pelotas, pero la aplicación se cierra en el momento porque el que actúa es el hilo principal, que sigue en ejecución esperando eventos.
2- Existe la posibilidad de crear una clase que en lugar de Runnable extienda de Thread y así nos evitamos algunos pasos intermedios.
3- Habría que aclarar y repetir, que el hilo se crea al crear la instancia, con el método start() se inicia, y ejecuta el método run(), que es el que lo dota de funcionalidad. Son aspectos que se pueden confundir.
Son apuntes que a nivel conceptual, entiendo que son importantes.
Gracias por tu trabajo titánico durante el desarrollo de este curso tan extenso y tan bueno.
Muy buenos apuntes Salvador. Muchas gracias
Buen video, tenía unos años de no ver Java dado que me enfoqué en lenguajes web y cms pero con ver este video, logré recordar aspectos de JPanel, JFrame que se hacen a pata y no usando la paleta del Eclipse o NetBeans y poco a poco fui recordando el tema de los hilos, se que me falta recordar pero viendo los otros videos del canal iré recordando dichos aspectos, saludos
Un saludo Mario
Solo quería felicitarte por el curso y darte las gracias por compartir tus conocimientos.
+Samuel Castro Gracias !! Un saludo
gracias profesor. Me partí un poco el coco en este video hasta que lo comprendí. Comento para que sepa que no lo he abandonado xD y que estaré eternamente agradecido con usted. Saludos!
Uhh! Qué buen tema! Ya llegamos a ésta parte que es clave! Cómo me esta abriendo la cabeza Java!
La explicación no puede ser mejor ni mas gráfica! una joya! Muchas gracias de nuevo!!!!
Abrazo, Leopoldo.
Leopoldo Miracco Gracias !! Saludos como siempre amigo
pildorasinformaticas muy buen curso a mi me está ayudando un montón con un proyecto que debo entregar la verdad que es uno de los pocos cursos que encontre que explica tan bien...quería preguntarle profesor si puedo hacer unas consultas via email o por mensajeria...pues debo terminar un video juego el tiempo me apremia el video de hilos me ayudo un monton..pero estoy un poco atascada...bueno espero su respuesta saludos...Romina
Puedes hacer las consultas que quieras por este mismo medio o por mail a la dirección cursos@pildorasinformaticas.es
Las dudas que me llegan por mail tardo en contestar. Recibo cientos de mails al día. Un saludo
pildorasinformaticas Gracias por contestar..tengo que hacer un video juego...ya tengo la parte inicial en donde uno selecciona a que video juego quiere entrar, eso barbarbo, se apaga y se prendre el sonido...ahora en donde no puedo seguir es en la pantalla del juego es decir el fondo que se mueva, simular un corrimiento de camara....(no se si me explico) y el personaje con el teclado...esto último lo estoy intentando con lo que publicaste último...si me podes dar una orientación desde ya más que agradecida....saludos (reitero muy buen curso)
Bravo!! Ando en búsqueda de como crear un hilo de tipo demonio pero este video me sirvió para entender la base de su funcionamiento. En verdad se agradece, video muy bien explicado, lastima no haberlo encontrado antes! Saludos!
+Billy Retamal Muchas gracias. Me alegro de que sea de utilidad. Un saludo
Excelente curso maestro, muchisimas gracias por todo, me ha ayudado muchisimo.
Saludos desde Venezuela.
Las pelotas a mi se me veían entrecortadas cuando le daba al botón "Dale!". No se si es porque soy usuario de Linux pero di con una solución buscando en internet. Lo que hay que hacer es ir al método paintComponent(Graphics g) y colocar dentro el método revalidate() para que la ventana siempre se revalide (es como si estuviéramos moviendo el mouse sobre la ventana). El resultado de esto es que se ve la pelota con un movimiento más fluido y sin que se vea entrecortado.
Gracias por este maravilloso curso! sigue así :D
Gracias por tus comentario y aportes. Un saludo!
Buen inicio de la segunda parte profesor, gracias!! le sigo desde el primer vídeo he aprendido mucho!!
Excelente clase, por favor siga subiendo mas conocimientos. gracias.
Muchas Gracias, me ha servido de mucho la explicación acerca de los Hilos y mas en una forma dinámica, Muchas Gracias
El problema de la excepcion ConcurrentModificationException que sale cuando pulsas en "Dale" varias veces, es porque se llama al metodo add de la clase LaminaPelota mientras el bucle for del metodo paintComponent está a medias. Una forma de evitarlo es sustitur la lista ArrayList por una lista CopyOnWriteArrayList que es válida para concurrencia.
Aunque en este caso concreto quizá es más eficiente sustituir el bucle for-each por un bucle for tradicional. Asi nos evitamos el uso del iterador interno del for-each que es el que provoca la excepción. Esto se puede hacer porque no tenemos borrados de elementos de forma concurrente, solo inserciones (add), y no nos importa que un paint que esta a medias no mueste el ultimo elemento que se acaba de añadir en un add de forma concurrente, ya lo mostrara en el siguiente paint 4 milisegundos más tarde.
brutal vídeo colega, la verdad apesar de que llevo ya un buen tiempo en el mundo de la programacion, era un poco escéptico al tema de los hilos y no me quedaba totalmente clara su motivo, pero con este video me ha quedado clarisimo.
Sin duda alguna me sucribo y like sin dudarlo, sigue asi
El parpadeo mejora enormemente sincronizando los gráficos al final de paint():
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
for(Pelota b: pelotas){
g2.fill(b.getShape());
}
// Asegura que el objeto gráfico se actualiza
Toolkit.getDefaultToolkit().sync();
}
Gracias por el aporte. Un saludo!
muchas gracias por su video, es el primero que veo y esta muy bueno, me veré todos gracias!
Que tal mi estimado Juan¡ Antes que nada permiteme enviarte mis felicitaciones por este curso. Es excelente y lo sigo puntualmente¡ Mi preocupación es si vas a continuar con los videos ya que me gustaría mucho continuar hasta la totalidad del curso. Saludos desde México.! un abrazo.
Arturo Guerrero Hola !! Por supuesto que voy a continuar. De hecho el último vídeo subido es de hace 4 días y si te fijas en las fechas de los vídeos verás que subo un mínimo de dos a la semana y en muchas ocasiones más. Un saludo
Siempre con información clara y directa, muchas gracias :D excelente profesor como siempre. Saludos
Eh esperado con ansias llegar hasta aqui
Sos el Mejor!. Te felicito por tus cursos!.
El curso es excelente, felicidades, sigue adelante...
Gracias a ti aprobé el examen de Programación. Muchas gracias por el video ^^
PD: Las coordenadas X e Y las he puesto Ramdom para que me salgan en sitios difetentes así queda más chulo jejeje Salu2
Aunque estaba esperando los videos de concurrencia, me hubieran gustado más de genéricos, porque el tema me da algunos problemas todavía. Aun así, excelente video.
Muchas gracias, que buen profesor , me ha servido de mucho
Muchas gracias Juan!
Gracias, muchas gracias profesor!!
Estaba intentando hacer lo mismo que tu, pero me ha salido otra cosa diferente pero muy curiosa y graciosa al mismo tiempo espero que les guste y aprendan un poco mas de java con el ejemplo.....
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class PracticandoConJava extends JFrame{
public static void main(String[] args) {
new PracticandoConJava();
}
public PracticandoConJava(){
setTitle("Practicas GRaficas");
setDefaultCloseOperation(3);
setBounds(10, 10, MarG1, MarG2);
setVisible(true);
LaminaNorte lanorte= new LaminaNorte();
add(lanorte,BorderLayout.NORTH);
lanorte.add(BotonStop);
lanorte.add(BotonLimpiar);
lanorte.add(jbola);
lanorte.add(jlinea);
lanorte.add(jtexto);
BotonStop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
thread.stop();parar=false;}});
BotonLimpiar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
repaint();
}});
jlinea.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
bola=false;string=false;
}});
jbola.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
bola=true;string=false;
}});
jtexto.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
string=true;bola=true;
}});
add(new LamainaSur(),BorderLayout.SOUTH);
add(new RodarEvento(), BorderLayout.CENTER);
}
class RodarEvento extends JComponent{
public RodarEvento(){
this.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e){ //Se ejecuta cuando pulsas el mouse sobre la lamina
System.out.println("EventoCargado");
parar=true;
colores++;
ancho= e.getX();
largo=e.getY();
Runnable arrancar= new eventosHilos(); //Instanciamos nuestra clase para poder ejecutarla varias veces...
thread = new Thread(arrancar); // Instanciamos la clsase Thread y creamos una variable que alojara un objeto de tipo Runnable
thread.start(); // Finalizamos poniendo a nuestra variable thread un metodo de inicio llamado start().
}});
this.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) { //Se ejecuta cuando arrastras el mouse haciendo un efecto a la linea de pintado
ancho= e.getX();
largo=e.getY();
paint(getGraphics());
}}); }
public void paint(Graphics g){
Graphics2D drawD2 = (Graphics2D)g;
if (colores==1){
drawD2.setColor(Color.BLUE);
}if (colores==2){
drawD2.setColor(Color.RED);
}if (colores==3){
drawD2.setColor(Color.ORANGE);
}if (colores==4){
drawD2.setColor(Color.BLACK);
}if (colores==5){
drawD2.setColor(Color.GREEN);
}if (colores==6)colores=0;
drawD2.setStroke(new BasicStroke(5));
if (string){
drawD2.drawString("PildorasInformaticas", ancho, largo);
}else drawD2.drawOval(ancho, largo, 2, 2);
}
class eventosHilos implements Runnable{
@Override
public void run() {
if (largo>1 || ancho>1){
while (parar){
if (largo==0){
entra1=true;entra3=false;}
if (ancho==0){
entra2=true;entra4=false;
}
if (largo==MarG2-100){
entra3=true;entra1=false;
}
if (ancho==MarG1-20){
entra4=true;entra2=false;
}
if (entra1){
largo++;
}
if (entra2){
ancho++;
}
if (entra3){
largo--;
}
if (entra4){
ancho--;
}
if (bola){repaint();}
paint(getGraphics());
try {
Thread.sleep(velocidad);
} catch (InterruptedException error) {
error.printStackTrace();
}
System.out.println(largo+" "+ ancho);
}
}
}
}
}
class LamainaSur extends JPanel{
public LamainaSur(){
texto1.setForeground(Color.BLUE);
add(texto1);
setBackground(Color.ORANGE);
}
}
class LaminaNorte extends JPanel{
public LaminaNorte(){
add(texto);
setBackground(Color.GREEN);
}
}
JButton BotonStop=new JButton("!Parar!");
JButton BotonLimpiar=new JButton("Limpiar");
JButton jbola=new JButton("Bola");
JButton jlinea= new JButton("Linea");
JButton jtexto=new JButton("Texto");
Thread thread;
int velocidad=10;
int bucle=20000;
int colores=0;
int MarG1=521;
int MarG2=552;
boolean parar=true;
boolean entra1=true;
boolean entra2=true;
boolean entra3,entra4;
boolean bola;
boolean string=false;
int ancho=-10;
int largo=-10;
JLabel texto= new JLabel("Botones...");
JLabel texto1= new JLabel("Pulsa en la lamina central, cuantas mas veces pulsas mas rapido se mueve");
}
+Rey Relampago Cortina Luego lo pruebo. Seguro que me río un rato ;)
Esta muy padre!!! Me he quedado sorprendido.
Me alegro 😉😆
Esta Genial !!!
wooooW! te quedo re bueno!! esta genial, muy creativo
un gran talento para enseñar thanks :3
+yelsin pulido hermitaño Gracias !! Un saludo
gracias profe esta clase se puso buena
Clarísimo Juan, gracias!
Amigo excelente vídeo en serio, todos los vídeos que tenés son increibles. Sabés que seria genial, que tus vídeos se pudieran descargar, es decir, que subieras un enlace para poder tenerlos en el ordenador. Lo dificil es que son muchos vídeos y ocuparía mucho. Pero regresando a la intro, excelentes vídeos, seguí así.
+Mario Grajeda Hola !! Gracias por el comentario. Me alegro de que te gusten. Un saludo
No entendí por qué si implementaste lo de hilos en el botón dale, pudiste salir sin problemas usando el otro botón al final.
De ahí en fuera fue un gran video, gracias.
Excelentes vídeos profesor, sin duda me han servido muchísimo. He topado con la suerte de tener buenos profesores en la universidad, pero usted, es igual a ellos, incluso podría decirle que es mejor, definitivamente estoy muy agradecido con su contenido, muchas gracias por dedicar su tiempo.
Estoy intentando desarrollar un Snake, un profesor de la universidad me indicó que después de Programación I tengo que estudiar dos temas esenciales de POO, por dicha ya había visto una buena parte de sus vídeos, ahora estoy estudiando la clase ArrayList y también este tema, Threads. Tengo una duda con el código fuente y es que no estoy muy ubicado porque no observé el vídeo explicativo de las animaciones en general, si usted sabe cuál es el vídeo o los vídeos le agradecería montones si lo menciona, igualmente, si el público en general sabe en cuál sección del PlayList se encuentra, estaría muy agradecido por su apoyo, muchas gracias nuevamente.
Súper Ejemplo! Muchas gracias =)
Juan, aqui es donde me parece que tu paciencia se estaba agotando....jaja...review review review.....Saludos! Excelente tu trabajo pero aca dimos un salto gigante....ABZ
Gracias por compartir tus conocimientos :)
JAJAJA como me sacaste una risa cuando dijiste nos podemos morir al esperar que termine JAJAJA
Voy a dejar esto por aquí por si a alguien más le pasa.
Resulta que yo no veía nunca la pelota demasiado rápida, solo podía ir más lenta pero no tan rápida como para no poder seguirla con los ojos.
Se debía a que uso un limitador de fotogramas en el panel de control de Nvidia a 60fps en la "Configuración global", para videojuegos básicamente.
Al desactivarlo y sin hacer uso de sleep(), vuelve a ir tan rápido como puede.
Hola que taaaal , la mejor intro
Excelente!!!, Gracias. Chévere cambur 🍌!!!!
metodo muy bueno para establecer láminas principales en un JFrame es el instanciaJFrame.setContentPane(lamina);
Un vídeo increible
Hermano mio, te mereces un monton de gracias por la metodologia de enseñanza y tus conocimientos, te enviaré una implementación de la interface "TableModel" (CRUD para cualquier tabla de postgreSQL) que hice hace varios años, para que la analices y expliques a todos con detenimiento. me puedes dar una via para enviartela o donde publicarla en tu sitio????
Muy bueno el vídeo, no tienes algún tutorial de programación en Android, explicas muy bien
Gracias por el comentario. Mira este enlace: ruclips.net/p/PLU8oAlHdN5Bkn-KS1sRFlSEnXXcAtAJ9P
Un saludo!!
Eres el mejor
excelente video bien explicado
Muy Buenos tus viedos! Pero nocesito correr varios algoritmo para mostrar cual es el mas eficiente. ya sea exponencial, loritmo, cuadratico, etc. Como genero diferentes ventanas y que se ejejuten a la vez dado un velor de entrada.
mostrarlo en diferentes paneles pero en la misma ventana
muchas gracias amigo , un saludo
Excelente profe!
+Phil lip Gracias !! Un saludo
Vengo del futuro a ver el vídeo sin haber visto el resto de clases... Deséenme suerte.
Lo que daría para que fueras mi profesor.
Chevere, muy claro, :)
Hola, quiero hacer una aclaración pequeña... El hecho de que se ejecute concurrentemente en realidad no significa que sea a la vez... El procesador puede ejecutar simultaneamente tantas tareas como núcleos tenga... pero un CPU (es decir, un núcleo) puede ejecutar solo una tarea a la vez... el hecho de que las tareas de la cola de listos se ejecuten de forma concurrente implica que si bien se ejecutan de una tarea a la vez, el procesador va desarrollando las tareas de tal forma que da la sensación de que se ejecutaran a la vez...
al final quise poner ".....de tal forma que da la sensación de que se ejecutaran VARIAS a la vez..."
Es correcto lo que dices pero no quería afinar tanto. Un saludo!
por fin !! matemáticas te utilizo xd
ste men :v
Hola profesor y companeros!
Ante todo quisiera agradecerle por todo. Tengo una pregunta fundamental, acerca del curso de JAVA (primer curso que hice bajo pildorasinformaticas y soy totalmente novato). Estoy por el Vídeo 169, en donde es allí donde necesito saber donde estoy parado, (ya que el ejercicio de pelota rebotando me bolo la cabeza), y ahora, quiero empezar a hacer ejercicios, porque después de ver tantos videos, necesito comenzar por hacer otros ejercicios, pero no se de que sitio web (porque hay miles), o que libro me puede recomendar para arrancar con buenas raíces.
Muchas gracias como siempre!!
Hola buenas no se si la pregunta pueda ser contestada... pero me surgio un error al abrir el codigo en eclipse del archivo de descarga relacionado con UTF-8 que en lugar de acentos muestra un signo de interrogación dentro de un rombo y otros simbolos raros en los comentarios que llevan ñ.. hay alguna manera de configurar eclipse para que no pase esto ?
Saludos y sigo con tu cursos Juan que son geniales se aprende mucho en este canal
Excelente
Richard Duran Gracias !!
Muy comprensible todo, de gran ayuda.
El hecho de que el programa pete al ejecutar muchos hilos podría tener que ver con la capacidad o número de hilos que tiene tu procesador? o al correr todo en la JVM no tiene nada que ver?
El problema de la excepcion ConcurrentModificationException que sale cuando pulsas en "Dale" varias veces, es porque se llama al metodo add de la clase LaminaPelota mientras el bucle for del metodo paintComponent está a medias. Una forma de evitarlo es sustitur la lista ArrayList por una lista CopyOnWriteArrayList que es válida para concurrencia.
Aunque en este caso concreto quizá es más eficiente sustituir el bucle for-each por un bucle for tradicional. Asi nos evitamos el uso del iterador interno del for-each que es el que provoca la excepción. Esto se puede hacer porque no tenemos borrados de elementos de forma concurrente, solo inserciones (add), y no nos importa que un paint que esta a medias no mueste el ultimo elemento que se acaba de añadir en un add de forma concurrente, ya lo mostrara en el siguiente paint 4 milisegundos más tarde.
A los que están muy agradecidos ... ¿sabian que pueden donar? lol... bueno quienes tengan recursos...
Como se puede haecr donaciones??
Muy bueno pero tengo una pregunta, porque el método salir funciona? Si has metido los hilos solo a la hora de generar pelotas como es que esa función es accesible? Gracias
Ten una duda espero me puedas responder
En tus videos no recuerdo si lo vi o no voy en el 168,
Tienes el tema de ejecutar aplicaciones en segundo plano
Me refiero a que si está en segundo plano la aplicación siga funcionando y no se detenga
Hola !! Eso corresponde al tema de los Threads. Efectivamente comienza en el vídeo 168 : ruclips.net/video/qXhc4wbDaqU/видео.html
Y sucesivos. Un saludo!!
Hola. gracias por su video; se aprende muchisimo con usted, pero tengo una pregunta y es por que le paso pelota y lamina como parametros al constructor de la clase que implementa la interfaz Runnable? le agradezco una respuesta.
+Johan Fonseca Sanchez Dime por favor minuto y segundo del vídeo donde aparece en el código lo que mencionas, y te responderé a la pregunta. Un saludo!!
Profe buen video,un pregunta cuantos videos quedan para empezar con la bases de datos???
black davo Hola !! Calculo que unos 25 o 30. Un saludo
private static final int tamX = 15, tamY = 15;
private double x = 0, y = 0
double dx = 1, dy = 1;
¿Qué tall si agrupamos las variables de class con el objetivo de reducir código?
saludos Juan, este ejercicio lo hice en su epoca con tus instrucciones pero se me perdio, el link de la descripción se encuentra malo, es posible que lo vuelvan a montar? o algún alumno colega me lo puede suministrar. saludos cordiales
Una pregunta, si tengo una clase Coche de la cual creo y defino los objetos, y la llamo desde otra CocheTest usando el extends para poder hacer un super de sus atributos y realizar los set y get y ademas implemento desde esa misma clase el runnable aplicando el run esta bien hecho?
Sinceramente me ha costado un poco entender el código. Para nosotros los principiantes les doy un consejo:
Separen el código por clases y debbugeen
Hola buenas noches este es un tema que siempre e querido aprender gracias por enseñarlo, tengo una duda que se sale del tema recuerdo en los primeros videos que un boton los ponias a la escucha por medio de la interfaz ActionListener pero en este caso a esa pelota como la pondria a la escucha digamos que si doy clic sobre ella que se cierre el programa Espero su respuesta Gracias por todo
20:46 soy serio con estas cosas pero morí con PelotaHilos xD :v
Hola. Muy buen curso. Donde podría ver el código para estudiar mejor?
Feliz día del maestro atrasado..
Y como seria un botón para que en vez de salir quite 1 pelota?
Hola que tal!Tengo algunas dudas a ver si es posible resolverlas(sobre el programa multihilos del video).No logro entender como se añade a la laminas la(s) pelota(s), si al llamar al metodo "lamina.add(pelota)"desde el metodo "comienza_el_juego" de la clase MarcoRebote, la logica me dice que lo que hace es añadir las pelotas al arraylist que hay de la clase LaminaPelota, ya que en el metodo "addd(Pelota b)" de la clase LaminaPelota entiendo que con la instruccion "pelotas.add(b)" al ser "pelotas" un arrayList lo que hace ese metodo al llamarlo es añadir las pelotas al arrayList ,y no añadirlas a la lamina como se comenta en el video(sé que estoy equivocado pero no se por qué). O es que se supone que añ añadir las pelotas al arraylist ya estoy añadiendolas a la lamina?No lo acabo de entenderOtra duda es: Si el hilo que minimiza o cierra el marco(sería el del main) o el del boton "cerrar" no está dentro del metoComo puesto entonces cerrar la aplicacion mientras se está ejecutando?Sé que la respuesta es muy basica pero tampoco entiendo esa parte.Y por último: ¿Lalinea "componente.paint(componente.getGraphics())" dentro del bucle for en la clase PelotaHilos llama al metodo "public void paintComponent(Graphics g)" de la clase LaminaPelota, y esto es lo que va pintando constanstemente la lamina?Muchisimas gracias y saludos!!!
+Carl Bacchus Luis Hola !! Vamos por partes:
"No logro entender como se añade a la laminas la(s) pelota(s), ..........". Respuesta: La clase LaminaPelotas tiene un método paintComponent en el cual pintamos pelotas con el método fill de la clase Graphics. Si después agregamos la lámina al marco, ya tenemos un marco con una pelota dibujada. Si además metemos la instrucción en un bucle como hacemos másadelante, ya tenemos varias pelotas.
"Si el hilo que minimiza o cierra el marco(sería el del main) o el del boton "cerrar" no está dentro del metoComo puesto entonces cerrar la aplicacion mientras se está ejecutando?......" Respuesta: He leído varias veces la pregunta pero no logro entenderla. ¿Podrías redactarlo e otra forma?
"Y por último: ¿Lalinea "componente.paint(componente.getGraphics())" dentro del bucle for en la clase PelotaHilos llama al metodo "public void paintComponent(Graphics g)" de la clase LaminaPelota, y esto es lo que va pintando constanstemente la lamina?" Respuesta: Correcto. Y esto responde en gran medida a tu primera pregunta.
Un saludo
+pildorasinformaticas
Gracias por la respuesta tan rápida y clara, lo he
entendido(yo lo había planteado mal, pensando que había que añadir las pelotas
a la lamina, como por ejemplo se hace con un botón, o con una lamina que añades
a otra lamina o marco)
Sobre la pregunta que no se entiende, volviéndola a leer yo
tampoco la he entendido :P A ver si soy capaz de hacerla que se entienda: Sé
que dentro del método “run” se pone el código correspondiente a las tareas que sean simultaneas, entonces
como cerrar/minimizar el marco (“setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);”)o
salir del programa(gracias a “System.exit(0);” en el botón de Salir) entiendo
que tambien son hilos pensaba que también se tendría que poner dentro del método
run, o llamar desde ahí. Sé que no es así porque el video me lo demuestra, pero
quisiera saber por qué mi planteamiento es erróneo(Pensaba que era así porque
en el primer programa hecho sin Threads no se podía cerrar el marco hasta que
la bola parase)
Sé cómo se debe hacer(he aprendido gracias a ti) pero quisiera
saber el por qué de las cosas, es la mejor manera de aprender(por eso, entre
otros motivos, me encantan tus videos, porque explicas todo muy claramente y
detalladamente)
:D threads ... Gracias
Duda, cuando crea la lamina, ahi ya tiene un hilo, es el hilo principal es el mismo que cierra la aplicacion, y al pulsar el boton "Dale!" se crean nuevos hilos, es asi o me equivoco.
saludos, excelentes cursos :).
+Ricardo Lopez Así es. Correcto !! Un saludo
me crea una duda, al no estar el código de salir en el metodo run() solo se podría salir cuando el hilo principal acabe?
muy bueno el curso de lo mejor de youtube, hay muchisimo trabajo detrás de estos videos. me alegro mucho que la gente sepa valorarlo.
un saludo. muchas gracias
dandole mas vueltas lo único que se me ocurre es que cuando se crea la primera pelota se crea otro hilo y deja el hilo principal libre.
se puede manejar los treads dentro de interfaces graficas??
¿Alguien mas se desesperó porque no le daba click a "Dale" y lo dejaban con ganas de ver a la pelota rebotar?
Quisiera que hagas un curso de JavaFx :c
Estoy en ello. Espero poder subirlo en breve. Un saludo!
Buenas. yo me acabo de descargar al archivo pero el programa no se ejecuta como debe. Puede ser haya algo desactualizado y por eso no funciona bien? gracias
Amigo, podrias colocar en que video explicas la logica de la Clase Pelota? Por favor
en otras palabras. me está diciendo de que la utilización de los bucles sin threads en una aplicación es inviable ?.
porque claramente se puede crear una segunda pelota, si agregara un evento listener y que instancie objetos en una array
Buenas tardes; me podria decir cual fue el tutorial donde usted realizo bien este ejemplo. gracias
+Johan Fonseca Sanchez No entiendo la pregunta.
Osea dpnde usted esplico bien lo de hacer una pelota que se moviera. Gracias y disculpe la pregunta
Osea el video
+Johan Fonseca Sanchez Pues no lo recuerdo. Tengo 195 vídeos en este curso y 719 en todo el canal. Me resulta imposible donde comenté una cosa u otra. Te paso la lista de reproducción para que lo busques tú si te sientes con ganas: ruclips.net/p/PLU8oAlHdN5BktAXdEVCLUYzvDyqRQJ2lk
Un saludo
gracias
Buen vídeo Felicitaciones si seria tan amable de poder obtener el código terminado.
Buenas, estoy aprendiendoel algoritmo de dekker, semaforos, fork join y esas cosas sirve para algo ? porque no encuentro donde aplicarlo
Sí, claro que sirve.... La necesidad surge cuando uno programa no una, sino muchas aplicaciones que manejan Threads. Entonces es cuando surgen los conflictos y donde entran en juego los conceptos que tú mencionas. En este curso no se ve ningún ejemplo donde se necesiten, pero es que se ven solo dos o tres ejemplos. Me gustaría abarcar más temas pero entonces el curso se me va a los 500 vídeos. Un saludo!!
Genial, gracias!! muy bueno el canal me subscribo
Hola.
Lo miré 4 veces y sigo sin entender. La implementación está sólo enfocada en ese código, no se explica en términos generales cómo se usa. Hubiese sido interesante que lo explicaras con un ejemplo más sencillo y que también lo hubieses explicado genéricamente.
Aún así tus otros videos fueron útiles. xD
Saludos.
Tendrias que ver todos sus videos hasta este punto; Todo lo visto lo ha dejado en los 167 anteriores
Animos!!