NetBeans Task selber schreiben und in Swing Application Framework einbinden

K-Man

Bekanntes Mitglied
Hallo zusammen
Ich nutze NetBeans und dessen Fähigkeit, Tasks zu erstellen, welche sich in die GUI einbinden. Wenn man da zB auf einen Button den Befehl "setAction" anwendet, dann kann man ja einen Backround-Thread erzeugen. Solange dieser Thread läuft, werden auch Rückmeldungen an die GUI abgegeben (durch setProgress und setMessage in doInBackround des Tasks).

Jetzt möchte ich aber einen eigenen Task erzeugen, der nicht durch eine Aktion auf der GUI, die ich durch setAction definiert habe, ausgelöst wird. Wie kann ich diesen Task in die GUI einbinden, so dass ich auch die Rückmeldungen über setProgress und setMessage abgeben kann? Dasselbe Problem trifft ja auch, wenn ich so einen automatisch von NetBeans erzeugten Task durch Task.execute() aufrufe. Solange ich nicht den Click auf den Button mache, gehen die setProgress und setMessage Methoden nicht.

Ich hab mal unten den Quellcode zum Task. Muss ich den jetzt bei der ResourceMap oder ActionMap der View anmelden?

Java:
public class ComputeProjectStatistics extends org.jdesktop.application.Task<Object, Object>
{
    private View _view;

    private Project _project;


    public ComputeProjectStatistics(org.jdesktop.application.Application app, View view, Project project)
    {
        super(app);
        this._view = view;
        this._project = project;
    }


    @Override
    protected Object doInBackground() throws Exception
    {
        // Hier kommen die setProgress und setMessage Aufrufe.
        return null;
    }


    @Override
    protected void succeeded(Object result)
    {
        _view.updateStatisicValues();
    }
}

Schon mal vielen Dank
Stefan
 
D

dc5ala

Gast
Beitrag ist zwar schon etwas älter, aber vielleicht hilf es jemand, der das gleiche Problem hat und hier drüberstolpert.

Du holst dir den "default" TaskService der Anwendung:

TaskService ts = MyApp.getInstance().getContext().getTaskService();

Und dann kannst deinen Task darin ausführen lassen:

ts.execute(new MyTask(MyApp.getInstance));
 

Neue Themen


Oben