|
812
|
Foros Generales / Foro Libre / Re: Me acaban de enviar a la FriendZone directo y sin anestesia. !Ayuda!
|
en: 29 Octubre 2018, 02:29 am
|
Creo que despues de esto no creo que haya otro "momento" pero que cojones estas diciendo? ademas Ella me respondio: "jajaja, cuando te dije que "salieramos", me referia a que me acompañaras afuera, a la salida de la universidad, nada mas XD. Oviamente solo te veo como un hermanito, como MI MEJOR AMIGO. En realidad yo ya tengo novio y lo amo, lo siento, espero que lo entiendas y sigamos siendo los mejores amigos. BYE. ".............. yo con eso no creo que jamas le hable, una mujer real no hará esa mal0xFFita estupidez.
tu mente ahorita esta afectada, pero dejame decirte que todos pasamos por esta ·"$&%& con las mujeres no eres le unico jajajaj
|
|
|
813
|
Programación / Java / Re: crear 5 objetos con caracteristicas ya definidas aleatoriamente
|
en: 29 Octubre 2018, 01:29 am
|
Hola que tal?
Usa geshi, las variables de instancia deben ser declaradas por convención como private que es un modificador de acceso en la linea 22 usamos aquí la clase SecureRandom, para generar los números pseudoaleatorios con el método .nextInt()
entonces que es lo que esta pasando, si haces numOjos[un numero aleatorio aquí que será el 0 o el 1], gracias a nextInt()
que según la API dice esto
* @param bound the upper bound (exclusive). Must be positive. * @return the next pseudorandom, uniformly distributed {@code int} * value between zero (inclusive) and {@code bound} (exclusive) * from this random number generator's sequence * @throws IllegalArgumentException if bound is not positive * @since 1.2 */ public int nextInt(int bound) {
cuando haces nextInt(numOjos.length) en length retorna 2, y ese numero 2 se excluye, dando como resultado un numero entre el 0 y 1, sin decimales, y ese numero corresponde al subindice de ese array
e igualmente con un array de mayor tamaño como nivelArreglarCosas que consta de 5 posiciones, nextInt() en ese caso le tocaría un numero de entre 0 a 4 porque length retornara 5, pero este se excluye por lo tanto seria 4;
por lo tanto nivelArreglarCosas[secureRandom.nextInt(nivelArreglarCosas.length)] se podría traducir a nivelArreglarCosas[numero aleatorio entre 0 a 4]
package foro; import java.security.SecureRandom; import java.util.Arrays; import java.util.stream.IntStream; public class Ayudantes { private int numOjos[] = {1,2}; private String colorPiel [] = {"morado", "amarillo"}; private String altura [] = {"mediano", "alto"}; private int nivelCrearObjetos[] = {1,2,3,4,5}; private int nivelArreglarCosas[] = {1,2,3,4,5}; private int nivelDestruccion[] = {1,2,3,4,5}; public Ayudantes() { } @Override return "Ayudante {" + "numOjos=" + (numOjos[secureRandom.nextInt(numOjos.length)]) + ", colorPiel=" + (colorPiel[secureRandom.nextInt(colorPiel.length)]) + ", altura=" + (altura[secureRandom.nextInt(altura.length)]) + ", nivelCrearObjetos=" + (nivelCrearObjetos[secureRandom.nextInt(nivelCrearObjetos.length)]) + ", nivelArreglarCosas=" + (nivelArreglarCosas[secureRandom.nextInt(nivelArreglarCosas.length)]) + ", nivelDestruccion=" + (nivelDestruccion[secureRandom.nextInt(nivelDestruccion.length)]) + '}'; } public static void main (String ... blabla) { IntStream.rangeClosed(1,5) . forEach(numero -> System. out. println(numero +"- "+new Ayudantes (). toString())); } }
Output1- Ayudante {numOjos=1, colorPiel=amarillo, altura=mediano, nivelCrearObjetos=5, nivelArreglarCosas=3, nivelDestruccion=4} 2- Ayudante {numOjos=2, colorPiel=amarillo, altura=mediano, nivelCrearObjetos=3, nivelArreglarCosas=2, nivelDestruccion=3} 3- Ayudante {numOjos=1, colorPiel=morado, altura=mediano, nivelCrearObjetos=2, nivelArreglarCosas=2, nivelDestruccion=4} 4- Ayudante {numOjos=2, colorPiel=morado, altura=mediano, nivelCrearObjetos=1, nivelArreglarCosas=4, nivelDestruccion=1} 5- Ayudante {numOjos=2, colorPiel=amarillo, altura=alto, nivelCrearObjetos=4, nivelArreglarCosas=3, nivelDestruccion=2} Process finished with exit code 0
3 maneras diferentes de hacerlo, existen masprivate void iterates() { for(int f=0; f<5; f++) { System. out. println((f +1)+"- "+new Ayudantes (). toString()); } System. out. println("··········································"); List<Ayudantes> ayudantes = new ArrayList<>(); ayudantes.add(new Ayudantes()); ayudantes.add(new Ayudantes()); ayudantes.add(new Ayudantes()); ayudantes.add(new Ayudantes()); ayudantes.add(new Ayudantes()); for(Ayudantes ayudante : ayudantes) { System. out. println(ayudante. toString()); } System. out. println("··········································"); IntStream.rangeClosed(1,5) . forEach(numero -> System. out. println(numero +"- "+new Ayudantes (). toString())); }
|
|
|
814
|
Programación / Java / Re: Envío de correo programado en otra fecha en Java
|
en: 25 Octubre 2018, 02:27 am
|
Eso se puede ajustar agregando un método set o por el constructor del public ExecTimer (final String fecha ) { this.fecha = fecha; initTask(); }
O con el método setpublic void setFecha (final String fecha ) { this.fecha = fecha; }
Con guava event bus también sirve, dependiendo que tan acoplado este tu código Esta fecha futura es la que debemos de setear por lo antes nombradoprivate static final String FECHA_FUTURA = "00 30 6 ? * FRI";
tu comentas Lo que no veo es como llamar desde la clase que gestiona el alta en base de datos a execTimer para pasarle la fecha en la que se debe enviar el correo. justo en esa parte debería ver un trozo del código para ver que tal esta, recuerda que el método execute del TimerClass es donde debe ir tu logica cuando el usuario dispare algun eventover el entrypoint de tu aplicación es también importante. Entonces refactorizando un poco crearemos nuestro builder para personalizar un poco homie, que se lo setearemos al método setTimeBean de la clase ExecTimer el método toString le hacemos override para adaptarlo a nuestras necesidades , tanto day como month son requeridos sino la misma API de quartz atrapara el error en runtime XD
el string retornado es la expresión de cron
@Override final StringBuilder stringBuilder = new StringBuilder() .append(sec) .append(" ") .append(min) .append(" ") .append(hour) .append(" ") .append(day) // requeridp .append(" ") .append(month) // requerido .append(" ") .append("?");// opcional el YEAR XD System. out. println("Expresion cron: "+stringBuilder. toString()); return stringBuilder.toString();
package foro; public final class TimeBean { private final int sec; private final int min; private final int hour; private final int day; private final int month; private TimeBean(final Builder builder) { this.sec = builder.sec; this.min = builder.min; this.hour = builder.hour; this.day = builder.day; this.month = builder.month; } public int getSec() { return sec; } public int getMin() { return min; } public int getHour() { return hour; } public int getDay() { return day; } public int getMonth() { return month; } @Override final StringBuilder stringBuilder = new StringBuilder() .append(sec) .append(" ") .append(min) .append(" ") .append(hour) .append(" ") .append(day) .append(" ") .append(month) .append(" ") .append("?");// opcional el YEAR XD System. out. println("Expresion cron: "+stringBuilder. toString()); return stringBuilder.toString(); } public static class Builder { private int sec; private int min; private int hour; private int day; private int month; public Builder withSec(final int sec) { this.sec = sec; return this; } public Builder withMin(final int min) { this.min = min; return this; } public Builder withHour(final int hour) { this.hour = hour; return this; } public Builder withDay(final int day) { this.day = day; return this; } public Builder withMonth(final int month) { this.month = month; return this; } public TimeBean build() { return new TimeBean(this); } }
Un ligero cambio a la clase ExecTimer package foro; import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import java.util.Objects; public class ExecTimer { private JobDetail job; private Trigger trigger; private Scheduler scheduler; private TimeBean timeBean; public ExecTimer() { } public ExecTimer(final TimeBean timeBean) { this.timeBean = Objects.requireNonNull(timeBean,()->"TimeBean sin instanciar crear builder"); } public void setTimeBean(final TimeBean timeBean) { this.timeBean = Objects.requireNonNull(timeBean,()->"TimeBean sin instanciar crear builder"); } public void initTask() { try { job = JobBuilder.newJob(TimerClass.class) .withIdentity("EnviarMail") .build(); trigger = TriggerBuilder.newTrigger() .withIdentity("testing v1.1 para olimpico10", "group1") .withSchedule(CronScheduleBuilder.cronSchedule(timeBean.toString())) .build(); scheduler = new StdSchedulerFactory().getScheduler(); scheduler.start(); scheduler.scheduleJob(job, trigger); } catch (SchedulerException e) { e.printStackTrace(); } } }
Aquí esta clase ejecutara el ExecTimer a modo de ejemplo, tu puedes crear la tuya en tu proyecto para instanciar Vemos 2 clases nuevas aquí ambas geniales con la nueva API de java.time
private final ZoneId zoneId = ZoneId.of("Europe/Madrid"); private final ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(Instant.now(),zoneId).plusSeconds(5);
Este método añade 5 segundos despues de el actual al String final o mejor dicho a la Expresion cron homie
.plusSeconds(5);
package foro; import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; public class ExcuteTaskOnNext { private ExecTimer execTimer = new ExecTimer(); private final ZoneId zoneId = ZoneId.of("Europe/Madrid"); private final ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(Instant.now(),zoneId).plusSeconds(5); public ExcuteTaskOnNext() { init(); } private void init() { final TimeBean timeBean = new TimeBean.Builder() .withSec(zonedDateTime.getSecond()) .withMin(zonedDateTime.getMinute()) .withHour(zonedDateTime.getHour()) .withDay(zonedDateTime.getDayOfMonth())//el dia es requerido .withMonth(zonedDateTime.getMonthValue()) //el mes es requrido .build(); execTimer.setTimeBean(timeBean); execTimer.initTask(); } public static void main (String ... agaga) { new ExcuteTaskOnNext(); } }
Entonces vamos a lo siguiente tu me diras joderrr tiiioo, pero este chaval le digo mil veces que quiero mandar el fucking correo al mes siguiente
solo te tocara añadir esto plusMonths(1)
nuestro builder podemos configurarlo de la siguente manera, o sea, valido también, si unicamente vas a usar el envio mensual
//para crear una tarea mensual el builder es valido asi segun cronmaker final TimeBean timeBean = new TimeBean.Builder() .withDay(zonedDateTime.getDayOfMonth())//el dia es requerido .withMonth(zonedDateTime.getMonthValue()) //el mes es requrido .build();
si colocamos la expresion originada gracias a la linea 54 de la clase TimeBean Expresion cron: 0 0 0 25 11 ? en http://www.cronmaker.com/ tenemos consta que debería crear el proyecto en struc2 pero me da flojera quizás mañana, tu tienes que probar aunque sea mandando ese correo a los 5 segundos, pero no se como es tu código ahí La clase ExcuteTaskOnNext a sido renombrada RunNextTask , siendo una mejor versiónpackage com.example.javamail.executarnextmonth; import com.example.javamail.util.GenericBuilder; import com.example.javamail.util.ShowData; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.ui.Label; import org.springframework.beans.factory.annotation.Autowired; import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; @SpringComponent public class RunNextTask implements ShowData { @Autowired private ExecTimer execTimer; private ZonedDateTime zonedDateTime; private TimeBean timeBean; public void initTimeBuilder (final Tiempos tiposTiempos, final Integer valueTime, Label label ) { try { switch (tiposTiempos) { case SEGUNDOS: zonedDateTime = getZoneDateTime().plusSeconds(valueTime); timeBean = getTimeBeanBuilder(); break; case MINUTOS: zonedDateTime = getZoneDateTime().plusMinutes(valueTime); timeBean = getTimeBeanBuilder(); break; case HORAS: zonedDateTime = getZoneDateTime().plusHours(valueTime); timeBean = getTimeBeanBuilder(); break; case MESES: zonedDateTime = getZoneDateTime().plusMonths(valueTime); timeBean = getTimeBeanBuilder(); break; } getLogger().error(null,ex); } execTimer.setTimeBean(timeBean); label.setValue("Expresión cron "+timeBean.toString()); execTimer.initTask(); } /** * Metodo de uso opcional */ public void initTimeBeanMonth() { final ZoneId zoneId = ZoneId.of("Europe/Madrid"); final ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(Instant.now(),zoneId).plusMonths(1); //para crear una tarea mensual el builder es valido asi segun cronmaker final TimeBean timeBean = GenericBuilder.of(TimeBean::new) .with(TimeBean::setDay,zonedDateTime.getDayOfMonth()) .with(TimeBean::setMonth,zonedDateTime.getMonthValue()) .build(); execTimer.setTimeBean(timeBean); execTimer.initTask(); } private ZonedDateTime getZoneDateTime() { return ZonedDateTime.ofInstant(Instant.now(),ZoneId.of("Europe/Madrid")); } private TimeBean getTimeBeanBuilder() { return GenericBuilder.of(TimeBean::new) .with(TimeBean::setSec,this.zonedDateTime.getSecond()) .with(TimeBean::setMin,this.zonedDateTime.getMinute()) .with(TimeBean::setHour,this.zonedDateTime.getHour()) .with(TimeBean::setDay,this.zonedDateTime.getDayOfMonth()) .with(TimeBean::setMonth,this.zonedDateTime.getMonthValue()) .build(); } }
donde invocaremos al método initTimeBuilder, con 3 parámetros- El tipo de tiempo
- El retardo
- El label para mostrar la salida
@Autowired private RunNextTask runNextTask;
runNextTask.initTimeBuilder(tiempo, valueTime, labelExpresionCron);
eso estará contenido en la clase FormEmailSender.java > Opción guiarse por aquí https://foro.elhacker.net/java/envio_de_emails_programados_con_springboot_vaadin_8_quartz-t489066.0.html
|
|
|
815
|
Programación / Java / Re: No se encuentra clase principal
|
en: 25 Octubre 2018, 00:54 am
|
Fijate que me creo una carpeta en el escritorio llamada como tu paquetejavac primerproyecto/PrimerProyecto.java
Este comando deberia de funcionarte ya que, con netbeans tiene el bytecode creadojava primerproyecto/PrimerProyecto
package primerproyecto; import java.util.function.Consumer; /** * * @author SonnyCrockett */ public class PrimerProyecto { /** * @param args the command line arguments */ public static void main (String[] args ) { //System.out.println("Hola Mundo esto es Java8"); java8 (System. out::println, "esto si es java8 XD"); } private static void java8 (final Consumer <String > c, final String msg ) { c.accept(msg); } }
si no te funciona el comando javac debes ajustarlo en el path de las variables de entorno, justo ahí tienes el falloC:\Users\SonnyCrockett\Documents\NetBeansProjects\PrimerProyecto\src\primerproyecto>java -version
debes moverte a la carpeta src, con el siguiente comando te mueves a través de los directorios anteriores con cd ..
debes moverte haste quedar aquíC:\Users\SonnyCrockett\Documents\NetBeansProjects\PrimerProyecto\src
y ejecutar desde ahí java primerproyecto/PrimerProyecto
|
|
|
818
|
Programación / Java / Re: No se encuentra clase principal
|
en: 24 Octubre 2018, 20:04 pm
|
Ve al directorio donde tengas el bytecode es decir el .class
Ten en cuenta q ese archivo está dentro de primerproyecto es :decir tu package
java nombrePaquete.TuClase , con el comando java lo ejecutas
E igual desde la cmd que te muestra la consola con
java -version y javac -version este último compila el .java a .class
Estoy desde el cell XD
|
|
|
819
|
Programación / Java / Re: Necesito ayuda con el desarrolo de una aplicación
|
en: 22 Octubre 2018, 22:30 pm
|
Hola, me gustaria que me ayudaran a entender la logica para poder desarrollar mi programa. El programa consiste en un verificador de presupuesto y de stock. y tambien debe constar de un convertidor de word o exel a pdf, para subir datos. Una base de datos donde se almacene el stock. Me ayudarian mucho a hacer una logica para empezar con el desarrollo del aplicativo y yo seguire subiendo mi codigo para que me ayuden a verificarlo. Soy nuevo en este foro, espero me puedan ayuudar.
Es que se te puede ayudar pero, no creo que aun estas para eso, hay librerias para todo lo que describes, pero como te tiro el codigo aqui cuando no sabrias como hacer las cosas?
tienes que tener codigo escrito
|
|
|
820
|
Programación / Java / Re: Programas para realizar aplicación ANDROID
|
en: 20 Octubre 2018, 13:35 pm
|
Buenas, me gustaría que me aconsejaseis sobre posibles maneras de crearme una aplicación Android para el móvil. Hago un pequeño resumen de lo que quiero hacer:
Tengo montado un robot y me gustaría controlarlo con una aplicación Android a través de Bluetooth. Para ello, he estado buscando información sobre internet y no sé si con Android Studio sería la mejor forma de poder crearme mi aplicación y de forma gratuita. Mi aplicación consistiría en algo simple: 4 o 5 botones para poder mover el propio robot hacia un lado u otro y ya después ponerlo mas o menos bonito depende del tiempo que tenga. No sé si tendría que hacer uso también de bases de datos, pero creo que no me haría falta porque no tendría que recoger ningún dato, simplemente darle a un botón y que el propio robot haga la función indicada.
Muchas gracias !!
Hola,
pues tal cual Android studio te vendría bien https://developer.android.com/studio/ y si son 4 botones con datos en runtime pues adelante, ya tu mismo sabes no te hace falta una db
|
|
|
|
|
|
|