#150 TheNewBoston en Youtube, pero si ya sabes C++ te aburrirás en los primeros vídeos, porque es desde cero.
Para PHP busca en Youtube EliTheComputerGuy.
Ambos son muy buenos.
#150 TheNewBoston en Youtube, pero si ya sabes C++ te aburrirás en los primeros vídeos, porque es desde cero.
Para PHP busca en Youtube EliTheComputerGuy.
Ambos son muy buenos.
#150 si ya sabes C++, sabes lo que es el paradigma de la orientación a objetos, sabes lo que son arrays, bucles y demás cosas varias... lo único que te queda por aprender de Java es:
1- La sintaxis
2- Los métodos específicos de java para hacer X cosa mucho más rápido o cosas que ya te vienen integradas.
Sinceramente te diría que te pillaras una idea, cuando estés atascado en algo, pregunta aquí o en stackoverflow y ya lo vas a tener casi todo solucionado.
Tengo aqui un pequeño fallo que nose donde radica:
El objetivo es crear un poligono mediante los clicks del raton. Con el izquierdo añado punto y con el derecho lo creo.
En el controlador tengo:
public void mouseReleased(MouseEvent me) {
if(SwingUtilities.isLeftMouseButton(me))
{
System.out.println(me.getX());
System.out.println(me.getY());
modelo.setX(me.getX());
modelo.setY(me.getY());
modelo.addpoint();
}
else if(SwingUtilities.isRightMouseButton(me))
{
modelo.pintaPoligono(modelo.getPoly(), modelo.getGrosor(), modelo.getPerfilColor(), modelo.getRellenoColor());
}
}
Y en el modelo:
public void addpoint(){
poly.addPoint(x,y);
}
Previamente declarado el poly como Polygon y la x y la y en esa clase.
El problema que me da es:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at model.addpoint(PhotoEditorModel.java:122)
Es decir que le llega un null segun entiendo y la verdad es que no se el por que ya que el print ese si que me muestra las coordenadas...
Tambien he probado a pasarle por parametros las coordenadas y nada..
#154: Ahora mismo no tengo tiempo, pero tengo que decirte que estás utilizando muy mal la orientación a objetos.
Si el objeto "modelo" y tiene sus datos dentro, lo normal sería que hicieses
modelo.pintaPoligono()
, y que los argumentos los pillase el mismo de dentro. Eso es muy "imperativo", por así decirlo.
#156: Si te lo han dado hecho, mientras sepas que eso está mal, perfecto .
#155 Ya se que eso no esta del todo bien hecho pero el método pintaPoligono ya te lo daban hecho. Y esta es la unica logica que le he encontrado para poder hacerlo.
A ver si alguien puede resolverme la duda.
A partir de un File, ¿cómo puedo determinar si se trata de un archivo de audio, vídeo, si está comprimido o es una imagen...etc?
Se me había ocurrido hacer un split al nombre del archivo y quedarme con la extensión, pero eso es una mierda mu gorda xd.
No existe ninguna forma universal de hacer eso con cualquier tipo de fichero habido y por haber.
Un fichero de un tipo determinado suele tener al principio algún tipo de cabecera que lo permite identificar, pero claro, cada tipo de archivo tiene una cabecera diferente, así que tienes que saber lo que estás buscando.
Un reproductor de vídeo busca cabeceras de archivos de vídeo, si no las encuentra, no es capaz de decirte que es, simplemente te dice "esto no es un archivo de vídeo", pero no te puede decir "esto es un documento word y no un archivo de vídeo.
#159
Si tiene un File, es que ha abierto localmente el contenido del archivo, no tiene mime type.
mime type
#158 por lo que entiendo viendo esto http://www.rgagnon.com/javadetails/java-0487.html es justo lo que quiere :/
#159 Ese link lo averigüa por la extensión (por lo que he visto por encima)
Edit: Bueno usa JMimeMagic para imagenes, Apache Tika para documentos con texto (algunos) y otros mas, asi que esta bien para empezar, pero no tendras todo.
Alguien me puede decir alguna guía o algo para hacer lo que sea en java?
Lo que son los bucles, arrays, etc lo tengo claro mas o menos, pero necesito ejercicios o algo por que si no no hago nada :-/
Buenas muchachos, tengo la siguiente duda:
Quiero recargar todas las clases de una carpeta (hasta ahí bien).
public void compileCommands() {
File dir = new File("./path/to/");
for (File child : dir.listFiles()) {
System.out.println(child.getAbsolutePath());
JavaCompiler jCompiler = ToolProvider.getSystemJavaCompiler();
List<String> options = Arrays.asList("-d", "./bin/", child.getAbsolutePath());
int compilationResult = jCompiler.run(null, null, null, options.toArray(new String[options.size()]));
if (compilationResult == 0) {
System.out.println("Commands compiled.");
} else {
System.out.println("Couldnt compile the .java to its .class");
}
}
}
Una vez que acaba ese codigo:
public static void initCommands() {
Class<?>[] allClasses = null;
try {
allClasses = getClasses("path.to");
} catch (ClassNotFoundException | IOException e1) {
e1.printStackTrace();
}
for (int i=0; i<allClasses.length; i++) {
try {
URL u = new File("bin/path/to").toURI().toURL();
URLClassLoader ucl = new URLClassLoader(new URL[] { u });
Class<?> cl = ucl.loadClass(allClasses[i].getName());
ICommand com = (ICommand) cl.newInstance();
registerCommand(Config.prefijo+
allClasses[i].getName().substring(
allClasses[i].getName().lastIndexOf(".")+4).toLowerCase(), com);
ucl.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
La cosa es que al cargarlas con URLClassLoader, no las carga bien o cualquier cosa ya que por ejemplo si comento una linea o agrego un Sysout("asdf"); no lo muestra.
La primera vez que arranca, carga las clases perfectamente, pero luego digamos que no se "actualizan".
Alguna manera de recargar todas las clases de un paquete?
Hola soy un noob en el asunto y tengo una pequeña duda.
Cómo se marca un intervalo entre dos valores. Por ejemplo quiero que me salga una cosa si el resultado es : entre 20 y 28.
#167 Muchas gracias, voy a ver si me funciona el asunto
#164 No se si te he pillado bien o es lo que planteas, comprendo que quieres importar las clases de una carpeta (?). Si es asi porque no simplemente pones los .java/.class dentro de un paquete y le haces un import? en plan com.appWeb.clasesAux y luego hacer un:
import com.appWeb.clasesAux.*;
#166 Te dejo un ejemplo cortito
private boolean comprobarNumero(int num){
if((num > 20) && (num < 28)) { return true; }else{ return false; }
}
int numero = 25;
if(this.comprobarNumero(numero)){
//ESTA DENTRO DEL RANGO
}else{
//NO ESTA DENTRO DEL RANGO
}
Esto comprobara los numeros entre 20 y 28 como indicas (osea 21,22,23,24,25,26,27,28), si quieres que ademas compruebe el 20 y 28 (osea, ese rango con los limites inclusives) deberas poner <= y >= en la condicion de comprobarNumero.
Un consejo para las comparaciones en los if's con Java, acostumbrate a agrupar cada parte de las comparaciones con parentesis porque cuando las hagas mas complejas Java es un poco caprichosas a la hora de interpretarlas. Te lo digo porque yo mismo el otro dia me comi la cabeza con un error y era porque los OR's no los comprende como debe sin los ().
#168 Al principio no le compliques mucho las cosas con funciones :3
Y lo que quiero es recargar clases en RUNTIME (tiempo de ejecución), no es un simple import.
#168 Oye pues me son muy útiles estos ejemplos, muchas gracias. No sabía lo de los paréntesis lo tendré en cuenta .
A ver tengo un problema que me reconcome, tengo una funcion que muestra cosas(Jframes con buttons y tal) y si al final de ella pongo que llame a otra funcion y al comienzo de esta ultima le pongo un sleep, porque cojones cuando hace el sleep se queda todo en blanco, es decir, es como si lo anterior no lo mostrara, directamente pasa a lo siguiente.
#171 Si pones el proyecto casi que mejor, he trabajado poquisimo con swing pero si el echo un ojo y puedo probarlo te lo soluciono xD
#172 gracias lo primero. Te pondría el proyecto o el código pero es bastante largo con lo que te voy a intentar resumir un poco. Estoy utilizando MVP y en el controlador tengo que se llama a esta funcion:
void crearpartida() {
view = new MainView(model);
view.addWindowListener(new ControllerWindowListener());
view.setActionListener(new ControllerActionListener());
view.ip.dif.setText(""+model.getDificultad());
view.ip.jug.setText(""+model.getJugadores());
view.setLocation(200, 200);
view.setVisible(true);
model.esperar(1); // AQUI ESTA EL PROBLEMA
empezarpartida();
partidacreada = true;
};
void empezarpartida() { // SIMPLEMENTE CAMBIA LAS IMAGENES de los BOTONES(carta)
for(int i=0; i<view.cp.car.length;i++){
view.cp.car[i].carta.setIcon(new ImageIcon("src/go.png"));
}
};
Por defecto, es decir, cuando se crea el view al comienzo de la primera funcion con el constructor se le ponen las imagenes verdaderas a los botones, luego se espera un segundo y se cambian las imagenes a esas de la funcion empezarpartida.
Por si las dudas el esperar del model es esto:
public void esperar(double segundos) {
long x=(int)(1000*segundos);
try {
Thread.sleep(x);
} catch (InterruptedException e) {
System.out.println("Aviso: Espera interrumpida");
}
}
#173 Tu codigo parece estar bien (teniendo en cuenta mis conocimientos con gui's). No he entendido bien lo que querias decir con lo de que lo de antes se borra y solo se ve lo siguiente, si me explicas un poco mejor el problema quizas sepa mejor como ayudarte.
Lo que si veo y no comprendo (tonteria en realidad) es que haces:
view.ip.dif.setText(""+model.getDificultad());
y yo me pregunto, porque concatenas ahi en vez de poner simplemente:
view.ip.dif.setText(model.getDificultad());
Otra cosa es saber si sabes que esa funcion es la que falla ver si te salta el catch, si no te salta pero te dumpea error en consola o algo podrias ponerlo tal que asi:
public void esperar(double segundos) {
long x=(int)(1000*segundos);
try {
Thread.sleep(x);
} catch (InterruptedException e) {
System.out.println("Aviso: Espera interrumpida");
} catch (Exception e) {
e.printStrackTrace();
//Aqui es donde hara catch que cualquier tipo de excepcion
}
}
De hecho he estado mirando docu's y el metodo que has escrito es exactamente igual al que estas usando xD.. pero como no he entendido muy bien tu problema principal tampoco puedo hacer mucho mas XDD
#174 Lo de la concatenación es porque la tanto la dificultad como los jugadores los manejo con enteros.
Respecto al problema principal se trata de el típico juego de cartas por parejas, que destapas una luego otra y comparas si son iguales y tal. Al comienzo de la partida se muestran las cartas unos segundos antes de taparse. En mi caso yo lo que hago es que cuando llamo al constructor para generar la vista los propios botones ya tienen su imagen verdadera y simplemente espero un segundo para cambiar esas imágenes por una que sea igual en todas(go.png), espero que se me entienda xd.
He probado con lo de la excepcion del catch y no sale nada.
#168: Nunca entenderé lo de
if (condition) {
return true;
} else {
return false;
}
Joder!
return condition;
#164 Prueba asi
URL u = new File("bin/path/to").toURI().toURL();
URLClassLoader cl = new URLClassLoader(new URL[] {u}, getClass().getClassLoader());
Class<?> cl = ucl.loadClass(allClasses[i].getName());
#178 La cosa es que el método es estático :-c
#180 Podrías explicar un poco la cosa, realmente no quiero simplemente copiarlo xD
#179
A ver esto es un poco estandar p cubo (programacion por pollazos), la explicación es que te funciona la primera vez bien xk tu clase no tiene classloader entonces te crea uno y tira nice pero la segunda vez (recarga) dice algo asi como "ojo que ya tengo un classloader" con lo cual no ves los cambios. Se supone (por que esto es como te he dicho p cubo) que con esto deberia crear un nuevo classloader y realmente hacer un reload.
Pasada la "teoria", pruebalo y me dices.
NOTA: NO lo he probado, estoy en el curro liado con la mierda de objective c, si quieres cuando llegue a casa te lo explico / pruebo mejor
URLClassLoader ucl = new URLClassLoader(new URL[]{u}, allClasses[i].getClass().getClassLoader());