Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - kinos

#61
Java / Re: Control de Threads avanzado
4 Noviembre 2009, 22:21 PM
Lo que puedes hacer es lo siguiente. Utilizas un hilo para hacer una tarea de generar datos por ejemplo y los vas guardando en una pila o una cola. Luego desde otro hilo los vas recuperando y haces otra tarea. Es como en este esquema:

|Hilo A|   --> Pila o cola <-- |Hilo B|

Así no tendrías la necesidad de pararlos nunca. Cuando no hay datos, Hilo B se queda esperando. Cuando hilo A añade datos despiertas con el metodo notifyAll() por si Hilo B esta esperando...
Y asi...

Si quieres parar los procesos. La gente no lo recomienda hacer mediante thread.stop(); porque no sabes en que punto se va ha quedar y si te puede generar problemas... Entonces te sugiero que utilices dentro del metodo run() de tu thread alguna artimaña.

Por ejemplo:
Código (java) [Seleccionar]

public void run() {
   while(estadoDeMiHilo){//mientras no haya que salir
    for(int i = 0; i < 10; i++) {

        datoObtenido = "Hola";
        contador=1;
        contador++;

            }
    }
      if(estadoDeMiHilo==pausa){
        wait();
      }
   }


Te recomiendo que leas mucha info y vayas haciendo ejemplos sencillos y una vez que tienes la estructura que quieres comienza a hacer tu programa.
#62
Hola Cesk,

Pero para eso tienes que saber que string cojer no?

Es que en un document la información me parece que se organiza asi:

|h|o|l|a|"/n"|¿|c|ó|m|o|" "|e|s|t|a|s|?|"/n"|

Por lo que no puedes saber donde empieza una línea creo...
#63
Java / Re: Script
3 Noviembre 2009, 17:04 PM
Si, abre dos programas distintos, lo he puesto por poner un ejemplo.
Prueba ha escribir:

Process p = Runtime.getRuntime().exec("cmd /c nombreScriptOComando");

No tengo ni idea de que ocurrirá pero para probar y evitar problemas de rutas deja el script en c:/ por si te da problemas con los espacios de la ruta. Luego tu verás si te funciona con la ruta.

Mira si haces esto te sale la consola y una pausa (cuando termine se cerrará):

Process p = Runtime.getRuntime().exec("cmd /c pause");
//no he probado el comando entero, solo he probado "inicio" -> "ejecutar" -> cmd /c pause

Suerte.
#64
   Ya pero eso te daría la posición de la primera ocurrencia. Y tendría que hacer el proceso de buscarla. No lo veo muy efectivo.
   He optado por guardar en un array de enteros la longitud de las líneas y cuando tenga que eliminar una línea lo miro ahí directamente. Es que pensaba que habría alguna función que te diese la longitud de las líneas. Con una función que haga eso estaría genial.
Gracias -Ramc-
#65
Java / como eliminar una linea de un JTextArea ?
2 Noviembre 2009, 22:38 PM
Hola.

Sabeis como puedo eliminar una línea de un JTextArea?

Me imagino que será con:

getDocument().remove(posicionInicial, posicionFinal);

Pero.. como puedo saber el comienzo y el final de una línea? o hay alguna forma más sencilla?
#66
Java / Re: Script
2 Noviembre 2009, 22:26 PM
A ver si te sirve esto, ten en cuenta la rutas también para que no te hagas un lio. Para ejecutar un script supongo que será igual, en vez de programa1 pones el nombre del script no?

Código (java) [Seleccionar]


try{
 //abrimos un programa
 Process p = Runtime.getRuntime().exec("programa1"); //tambien le puedes poner argumentos
 //Process p = Runtime.getRuntime().exec("programa1 arg1");
 int exitCode = p.waitFor();
 System.out.println(exitCode);
 p = Runtime.getRuntime().exec("programa2");//abrimos otro
 if (exitCode != 0)
 {
  //si sale mal... aqui deberias poner algo
   //..
   p = Runtime.getRuntime().exec(cmd);
 }
 }catch (IOException e){
   e.printStackTrace();
 }catch (InterruptedException ee){
     ee.printStackTrace();

 }

#67
Gracias. Creo que ya voy aclarandome. ;D

Igual asi... aunque lo veo redundante:

Código (java) [Seleccionar]

package desktopapplication2;

public class DesktopApplication2 extends SingleFrameApplication {

    private ObjetoA objeto;

    @Override protected void startup() {
        show(new DesktopApplication2View(this, objeto));
    }

    @Override protected void configureWindow(java.awt.Window root) {
    }

    public static DesktopApplication2 getApplication() {
        return Application.getInstance(DesktopApplication2.class);
    }

    public static void main(String[] args) {

        //se crea el splashScreen
        SplashScreen splashScreen = new SplashScreen();
        //lo mostramos
        splashScreen.mostrar();

        //cargamos los objetos pesados, su carga requiere mucho tiempo
        objeto = new ObjetoA();
        objeto.hacerTarea();

        //splashScreen desaparece
        splashScreen.desaparece();

        //*:) como paso los objetos a la aplicacion grafica-----------------------------------------
        //los pasas en el startup()

        launch(DesktopApplication2.class, args);
    }
}


Lo que no mola es que el objeto "private ObjetoA objeto;" tiene que estar en la clase DesktopApplication2 y en la DesktopApplication2View. Eso es feo :huh:
#68
Ya :P pero nose como los tengo que pasar.

Es que en esta instrucción podrias pasarle string en args, pero como paso un objeto...
launch(DesktopApplication2.class, args);

Es mas, se lo tendría que pasar a DesktopApplication2View que es lo que contiene todo no?

O deberia declarar ObjetoA como... public ObjetoA objeto; en DesktopApplication2 y acceder desde DesktopApplication2View de alguna forma?
#69
Stoy hecho un lio...  :o

   He hecho una aplicacion de escritorio con Netbeans. Le he puesto un splashScreen para que salga una imagen mientras se va cargando.
   La duda es, que proceso debo seguir para ir cargando la aplicación, cargar los objetos y demás que requieran mucho tiempo. Entonces cuando ya se haya concluido pasarlos de alguna forma a la parte grafica. Se lanza con launch(DesktopApplication.class, args); y en este punto es cuando debería desaparecer el splash.

Esta es la estructura que tiene mas o menos:

Código (java) [Seleccionar]

package desktopapplication2;

public class DesktopApplication2 extends SingleFrameApplication {

    @Override protected void startup() {
        show(new DesktopApplication2View(this));
    }

    @Override protected void configureWindow(java.awt.Window root) {
    }

    public static DesktopApplication2 getApplication() {
        return Application.getInstance(DesktopApplication2.class);
    }

    public static void main(String[] args) {

        //se crea el splashScreen
        SplashScreen splashScreen = new SplashScreen();
        //lo mostramos
        splashScreen.mostrar();

        //cargamos los objetos pesados, su carga requiere mucho tiempo
        ObjetoA objeto = new ObjetoA();
        objeto.hacerTarea();

        //splashScreen desaparece
        splashScreen.desaparece();

        //*:) como paso los objetos a la aplicacion grafica-----------------------------------------

        launch(DesktopApplication2.class, args);
    }
}



DesktopApplication2View otra parte de codigo:
Código (java) [Seleccionar]

public class DesktopApplication2View extends FrameView {

    public DesktopApplication2View(SingleFrameApplication app) {
        super(app);

        initComponents();
        ....
        }

       ....

        @Override protected void finished() {
            setSaveNeeded(false);
        }
    }
}



Si hay que hacerlo de otra manera corregirme por favor.
#70
Gracias, ya esta solucionado.

He escrito en la clase del splashScreen -->
image = Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("desktopapplication/resources/splashScreen.jpg"));

Y por ahora funciona bien  :silbar: