Mon programme blocke quand il est démarrer le processus

Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour,


je suis entrain de programmer une application qui prend des information de base de donnée et le enregistrer dans des fichiers .

le base de donnée est grand . le preccessus est pris le temps , et je veux ajouter l'option de pause et continue .

mais le problème est quand il est démarrer l'opération il est blocker , dans ce moment je peux pas faire pause , et le programme utilise 100% processeur de mon pc .

est-ce-qu'il y a une solution pour ça ?

et merci d'avance !

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Je viens de faire quelque chose d'assez compliqué qui permet de rajouter une icône dans la barre des tâches et de l'utiliser pour faire des pauses dans le programme. Normalement tu n'auras pas à modifier cette partie là du code, donc ce n'est pas grave si tu ne la comprends pas. En revanche regarde la classe de test pour voir comment l'utiliser, et adapter ton code en fonction... J'espère que ça te sera utile.

import java.awt.Image;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class Test implements PauseTray.Pausable
{
    private static boolean go = false;
    
    @Override
    public void pause() 
    {
        System.out.println("PAUSE");
        go = false;
    }

    @Override
    public void start()
    {
        System.out.println("START");
        go = true;
    }

    @Override
    public void stop()
    {
        System.out.println("STOP");
    }
    
    private static void sleepIfPause(int millis)
    {
        while (!go)
        {
            try 
            {
                Thread.sleep(millis);
            } 
            catch (InterruptedException e)
            {
                e.printStackTrace();
            }
        }
    }
    
    public static void main(String[] args) throws IOException
    {
        Image icon = ImageIO.read(new File("C:/icon.png"));
        PauseTray.addTrayWithPausable(new Test(), icon).start();
        
        for (long i=0;;i++)
        {
            sleepIfPause(100);
            
            System.out.println(i);
        }
    }
}

//-----------------------------------------------------------

import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class PauseTray
{
    public interface Pausable
    {
        public void pause();
        public void start();
        public void stop();
    }

    public static Pausable addTrayWithPausable(final Pausable pausable, final Image icon)
    {
        final MenuItem start = new MenuItem("start");        
        final MenuItem pause = new MenuItem("pause");
        final MenuItem stop = new MenuItem("stop");
        
        try 
        {
            PopupMenu popup = new PopupMenu();
                popup.add(start);
                popup.add(pause);
                popup.addSeparator();
                popup.add(stop);
            
            TrayIcon trayIcon = new TrayIcon(icon);
                trayIcon.setPopupMenu(popup);
            
            SystemTray.getSystemTray().add(trayIcon);
        } 
        catch (AWTException e)
        {
            throw new RuntimeException(e);
        }
                
        pause.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                pause.setEnabled(false);
                
                try
                {
                    pausable.pause();
                }
                catch (Throwable t)
                {
                    t.printStackTrace();
                    System.exit(1);
                }
                
                start.setEnabled(true);
            }
        });
        
        start.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                start.setEnabled(false);
                
                try
                {
                    pausable.start();
                }
                catch (Throwable t)
                {
                    t.printStackTrace();
                    System.exit(1);
                }
                
                pause.setEnabled(true);
            }
        });
        
        stop.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                try
                {
                    pausable.stop();
                    System.exit(0);
                }
                catch (Throwable t)
                {
                    t.printStackTrace();
                    System.exit(1);
                }
            }
        });
        
        start.setEnabled(true);
        pause.setEnabled(false);
        stop.setEnabled(true);
        
        return pausable;
    }
}
0
Utilisateur anonyme
 
tu ne me comprend pas ,je veux mon programme fonction sans blocage quand il est enregestrer dans les fichiers . et laisse moi clicker tout les bouton là .

autre chose : je peux pas changer un jtextfied de classe a par un code a.jtextfield.settext("bla bla") dans classe b.

et merci pour vous
0