gpt4 book ai didi

java - 如何访问动态任务而不将其设为静态

转载 作者:行者123 更新时间:2023-12-01 12:03:46 25 4
gpt4 key购买 nike

今天只是一个简单的问题,我制作了一个 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;
}
}
}

在一个单独的类(class)中我有这个:

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

如何更改 ActionHandler 类中的 taskList 的值而不将其设为静态?谢谢。

编辑:这是我的樵夫类(class)

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 进行静态引用。

最佳答案

您的 ActionHandler 应该包含 woodcutter 类的一个实例。您可以注入(inject)依赖项,也可以像我的示例中那样急切地创建它。 woodcutter 类应该有一个任务列表的 get 方法,该方法简单地返回列表。在 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;
}
}
}

关于java - 如何访问动态任务而不将其设为静态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27817188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com