tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
388
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    schuetzejanett schuetzejanett ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    191
    Hallo,

    habe in meiner Eclipse RCP mehrere ActnKlassen (erben von Jface.Action) .

    In dieser gibt es immer eine run() methode, welche ausgeführt ird, wenn der Nutzer einen Button klickt.
    Was mich interessiert ist, was passiert, wenn der Nutzer mehrmals hinter einander den Button klickt. Und die Aufgae aer noch ar nicht aggearbeietet ist? Werden die späteren Klicks ignoriert, werden sie danach ausgeführt oder werden sie parallel ausgeführt. Mir wäre es ja am liebsten, wenn alle weiteren Aktionen danach ausgeführt werden. Aber der Nutzer soll nicht das gefühl haben, das die GUI hängt?

    Funktioniert das automatisch so oder wie ist das?
     

  2. #2
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    das kommt ganz drauf an wie du deine Action und das Aufrufen der dahinterliegenden Funktion implementiert hast... wenn du zur Ausführung der Aufgabe einen neuen Thread (Job) startest, kann es schon sein, dass bei nochmaligem klicken auf die Action diese ein zweites mal ausgeführt wird. Es sei denn du hast hier entsprechende Sperren / locks gesetzt die das verhindern. Führst du die Anwendungslogik jedoch im UI Thread aus so blockiert die UI ... dann kann auch keiner mehr auf die Action klicken wenn die schon läuft.

    Ich würde dir empfehlen langlaufende Aktionen in einem Job auszuführen und dann entsprechendene Sperren zu setzen bis der Job erledigt ist. Während die Sperre gesetzt ist, kann der Menu Punkt beispielsweise ausgegraut sein, oder es kommt beim draufklicken eine entsprechende Meldung.

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  3. #3
    schuetzejanett schuetzejanett ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    191
    Hallo,

    also ich starte es in einem Job, aber was meinst du mit Sperren gesetzt. Wie Setze ich diese?
    Die betreffende Aktion wird einmal per doppelklick auf eine tabellenzeile und einmal über die menuleiste ausgewählt. Das heißt ich habe mehrere Instanzen der actionklasse. denn fürs menu erstelle ich einer im ActionbarAdvisor und dann noch eine in der viewklasse, beim doppelklickevent auf die zeile Kann ich trotzdem durch logging/sperren verhindern das die Aktion mehrfach ausgeführt wird?
     

  4. #4
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    einfach in der run(...) Methode der Action

    if(canPerform()){
    ... do something
    }else {
    ... can't perform action at this time
    }

    entweder per Aspect oder Proxy oder Delegating Action...

    Oder man benutzt Capabilities:
    http://eclipse.pookzilla.net/2005/12...erspective.php

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  5. #5
    schuetzejanett schuetzejanett ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    191
    Hallo, danke für ddie schnelle Antwort aber wie sieht jetzt die canPerform Methode aus?
    Also wie frage ich ab, ob es eine Instanz dieser Klasse gibt, welche gerade diesen Job ausführt?
     

  6. #6
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    du könntest einfach schauen, ob der Job schon läuft...:
    Code java:
    1
    2
    3
    4
    5
    
            if (Job.getJobManager().find("simpleJob-family").length == 0) {
                new SimpleJob("Calculating PI...").schedule();
            } else {
                System.out.println("Simple job is already running");
            }

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  7. #7
    schuetzejanett schuetzejanett ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    191
    hallo, sorry hatte in den letzten Tagen ein bischen Stress und komme erst jetzt wieder dazu mich damit zu beschäftigen.

    Ich habe zu deinem Code noch eine frage,
    Wie ordne ich einen JJob einer Familie zu. mit belongsTo() teste ich ja bloß ob er zu der Familie gehört, aber wie ordne ich ihn zu einer familie dazu.

    Und dann noch was anderes , gibts bei Jobs eine warteschlange, also das ich sage, stell dich an und wenn der job abgearbeitet ist, wird der nächste abgearbeitet. oder so?
     

  8. #8
    schuetzejanett schuetzejanett ist offline Mitglied Gold
    Registriert seit
    Apr 2007
    Beiträge
    191
    Hallo,

    Ok habe nun gelesen, das man es die Methode join(), gibt welcher man Jobfamilie und progressmonitor gibt und welcher den Job ausführt nachdem alle anderen Jobs der jobfamilie ausgeführt sind.
    Also eigentlich genau das was ich will. Nur leider funktioniert es nicht. Also der Job wird nie augeführt.

    Hier ist mein Code sieht jemand den fehler?

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
    @Override
        public void run()
        {
            try
            {
                Job JobPrint = new Job("Drucken")
                {
                    @Override
                    public boolean belongsTo(Object family)
                    {
                        System.out.println("abgefragt");
                        return family.equals("blockJob");
                    }
     
                    @Override
                    protected IStatus run(IProgressMonitor monitor)
                    {
                        //tue etwas
                        return Status.OK_STATUS;
                    }
                };
                //JobPrint.getJobManager().join("blockJob", null);   //geht auch nicht
                Job.getJobManager().join("blockJob", null);
            } catch (OperationCanceledException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InterruptedException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    Was fehlt oder warum gehts nicht?
     

Ähnliche Themen

  1. Ein Action Objekt für einen JButton, jedoch ohne Action-Text?
    Von DarthShader im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 8
    Letzter Beitrag: 12.07.08, 10:16
  2. Button mehrmals klicken (For Schleife)
    Von a*new*found*flo im Forum Flash Plattform
    Antworten: 5
    Letzter Beitrag: 18.03.06, 10:29
  3. Problem miit: action='index.php?action=weiter
    Von NetPerformance im Forum PHP
    Antworten: 8
    Letzter Beitrag: 20.10.05, 13:53
  4. Struts Action auf andere Action umleiten und Parameter übergeben
    Von mungoparks im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 2
    Letzter Beitrag: 28.01.05, 18:28
  5. Button läßt sich trotz action nicht klicken
    Von Pandera im Forum Flash Plattform
    Antworten: 3
    Letzter Beitrag: 26.09.03, 16:28