如何在不使其成为静态的情况下访问动态任务

时间:2015-01-07 10:21:47

标签: java swing

今天只是一个简单的问题,我做了JFrame,当我点击“让我们这样做!”按钮我想将它添加到“Woodcutter”中的数组列表中,这是我的代码,感谢任何帮助。

package org.script.gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import org.script.Constants;

public class ActionHandler implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent action) {
        switch (action.getActionCommand().toLowerCase()) {
        case "let's do this!":
            //TODO i want this to be able to change taskList from Woodcutter!
            break;
        default:
            System.out.println(action.getActionCommand().toLowerCase()+" - COMMAND NOT ADDED!");
            break;
        }
      }
    }

在一个单独的课程中我有这个:

public List<Task> taskList = new ArrayList<>();

如何在不使ActionHandler类变为静态的情况下更改taskList的值?感谢。

编辑:继承我的樵夫课程

package org.script;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.swing.JOptionPane;

import org.powerbot.script.PollingScript;
import org.powerbot.script.rt6.ClientContext;
import org.script.gui.ScriptSettings;
import org.script.task.Task;

public class Woodcutter extends PollingScript<ClientContext> {

    public List<Task> taskList = new ArrayList<>();

    @Override
    public void start() {
        ScriptSettings.main(null);
    }

    @Override
    public void poll() {
        for (Task task : taskList) {
            if (task.activate()) {
                task.execute();
            }
        }
    }

    public void verifyOptions() {
        if (Constants.FLETCHING && Constants.BONFIRES) {
            sendError("You cant fletch and use bonfires!");
        } else if (Constants.BONFIRES && Constants.BANKING) {
            sendError("You cant use bonfires and bank!");
        } else if (Constants.BANKING && Constants.FLETCHING) {
            sendError("You cant bank and fletch!");
        } else {
            taskList.addAll(Arrays.asList(new Dropper(ctx)));
        }
    }

    private void sendError(String message) {
        JOptionPane.showMessageDialog(null, message, "Error", JOptionPane.ERROR_MESSAGE);
    }

}

编辑2 - 即使我确实将其设为静态,我也无法对非静态字段ctx进行静态引用。

1 个答案:

答案 0 :(得分:1)

你的ActionHandler应该拥有樵夫类的一个实例。您可以注入依赖项,也可以像我的示例中那样热切地创建依赖项。 woodcutter类应该有一个taskList的get方法,simple方法返回列表。在google上搜索getter和setter方法以获取更多信息。

package org.script.gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import org.script.Constants;

public class ActionHandler implements ActionListener {

    private Woodcutter wc = new Woodcutter();

    @Override
    public void actionPerformed(ActionEvent action) {
        switch (action.getActionCommand().toLowerCase()) {
        case "let's do this!":
            wc.getTaskList().add(new Task());
            break;
        default:
            System.out.println(action.getActionCommand().toLowerCase()+" - COMMAND NOT ADDED!");
            break;
        }
      }
    }