Как я могу передать аргументы в SwingWorker? - PullRequest
6 голосов
/ 26 октября 2011

Я пытаюсь реализовать Swing worker в моем графическом интерфейсе. На данный момент у меня есть JFrame, содержащий кнопку. Когда эта кнопка нажата, она должна обновить отображаемую вкладку, а затем запустить программу в фоновом потоке. Вот что у меня есть.

class ClassA
{
    private static void addRunButton() 
    {
        JButton runButton = new JButton("Run");
        runButton.setEnabled(false);
        runButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) 
            {
                new ClassB().execute();
            }
    });

    mainWindow.add(runButton);
    }
}

class ClassB extends SwingWorker<Void, Integer>
{
    protected Void doInBackground()
    {
        ClassC.runProgram(cfgFile);
    }

    protected void done()
    {
        try 
        { 
        tabs.setSelectedIndex(1);
        } 
        catch (Exception ignore) 
        {
        }
    }
}

Я не понимаю, как я могу передать свой cfgFile объект. Пожалуйста, кто-нибудь может посоветовать по этому поводу?

Ответы [ 2 ]

20 голосов
/ 26 октября 2011

Почему бы не дать ему поле File и заполнить это поле с помощью конструктора, который принимает параметр File?

class ClassB extends SwingWorker<Void, Integer>
{
    private File cfgFile;

    public ClassB(File cfgFile) {
       this.cfgFile = cfgFile;
    }

    protected Void doInBackground()
    {
        ClassC.runProgram(cfgFile);
    }

    protected void done()
    {
        try 
        { 
        tabs.setSelectedIndex(1);
        } 
        catch (Exception ignore) 
        {
           // *** ignoring exceptions is usually not a good idea. ***
        }
    }
}

А затем запустите его так:

public void actionPerformed(ActionEvent e) 
{
    new ClassB(cfgFile).execute();
}
1 голос
/ 26 октября 2011

Используйте конструктор для передачи параметра. Например, вот так:

class ClassB extends SwingWorker<Void, Integer> 
{

private File cfgFile; 

public ClassB(File cfgFile){
this.cfgFile=cfgFile;
}

protected Void doInBackground() 
{ 
    ClassC.runProgram(cfgFile); 
} 

protected void done() 
{ 
    try  
    {  
    tabs.setSelectedIndex(1); 
    }  
    catch (Exception ignore)  
    { 
    } 
} 

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...