Java 无法获取新Putte的HashMap元素?
嘿,伙计们,我不知道发生了什么事?我添加了生日,但如果使用getHashMap调用它们,例如,我无法获取swingmenu类中的元素。我只是对这个问题有一些想法。我想这是因为我在一个类中调用了新事件,而在另一个类中输出hashmap时,我也调用了新事件。但我不知道我是否正确 也许任何解决办法都会对我有所帮助。如果你有问题,请问我。对我来说,学习新东西很重要。有一些短代码showen,因为它不相关。我调试了swingFormatFunction类,发现实例事件为null 此部分不会添加到我的HashMap中Java 无法获取新Putte的HashMap元素?,java,constructor,hashmap,elements,Java,Constructor,Hashmap,Elements,嘿,伙计们,我不知道发生了什么事?我添加了生日,但如果使用getHashMap调用它们,例如,我无法获取swingmenu类中的元素。我只是对这个问题有一些想法。我想这是因为我在一个类中调用了新事件,而在另一个类中输出hashmap时,我也调用了新事件。但我不知道我是否正确 也许任何解决办法都会对我有所帮助。如果你有问题,请问我。对我来说,学习新东西很重要。有一些短代码showen,因为它不相关。我调试了swingFormatFunction类,发现实例事件为null 此部分不会添加到我的Has
public class swingFormatFunction{
private Event event = new Event();
public void geburtstageFormatieren(String content) {
String formatContent = content.replace(';', ' ');
for (String s : formatContent.split("\n")) {
event.addBirthday(s.substring(0, 5).toString(), new Event(s.substring(12).toString()));
}
}
}
这是我的菜单,我在其中调用菜单项并单击“确定”。这个函数在输出元素时运行良好
public class swingMenu{
okBTN.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == okBTN) {
dialog.dispose();
JDialog dialog = new JDialog();
dialog.setModal(true);
dialog.setTitle("Calendar Special Events");
int yearNumber = Integer.parseInt((String) yearCombobox.getSelectedItem());
JTextArea textArea = new JTextArea();
Event event = new Event(yearNumber);
StringBuilder stringBuilder = new StringBuilder();
for (Map.Entry entry : event.getEventMap().entrySet()) {
stringBuilder.append(entry.getKey() + " : " + entry.getValue() + "\n");
}
textArea.setText(stringBuilder.toString());
dialog.setContentPane(textArea);
dialog.pack();
dialog.setLocationRelativeTo(null);
dialog.setResizable(true);
textArea.setEditable(false);
dialog.setVisible(true);
}
}
});
那是我的活动课。这个类包含我使用它的HashMap
public class Event{
private HashMap<String, Event> eventMap = new HashMap<>();
public Event(String name) {
this.name = name;
}
public Event(int year) {
addStrongMoveableHolidayInMap(year);
}
public Event() {
}
private void addMoveableHoliday(int year) {
/* Bewegliche Feiertage */
/*Rose monday (-48)*/
int daynumberOfEasterSunday = calenderFunction.easterSunday(year) - 48;
String gregorDate = calenderFunction.kalenderDatumFuerJD(daynumberOfEasterSunday);
String day = gregorDate.substring(0, 2);
String month = gregorDate.substring(3, 5);
String date = day + "." + month;
this.eventMap.put(date, new Event("Rosenmontag"));
}
private void addStrongHoliday(int year) {
/* Feste Feiertage */
this.eventMap.put("24.12", new Event("1. Weihnachtstag"));
}
void addStrongMoveableHolidayInMap(int year) {
addStrongHoliday(year);
addMoveableHoliday(year);
}
public void addBirthday(String year, Event event) {
this.eventMap.put(year, event);
}
public HashMap<String, Event> getEventMap() {
return eventMap;
}
}
公共类事件{
私有HashMap eventMap=新HashMap();
公共事件(字符串名称){
this.name=名称;
}
公共活动(国际年){
Addstrong地图中的可移动假日(年);
}
公共活动(){
}
私人假期(国际年){
/*贝韦格利什·费尔塔奇*/
/*玫瑰星期一(-48)*/
int daynumberOfEasterSunday=日历函数。easterSunday(年份)-48;
字符串gregorDate=calenderFunction.kalenderDatumFuerJD(daynumberOfEasterSunday);
String day=gregorDate.substring(0,2);
字符串月份=gregorDate.substring(3,5);
字符串日期=天+“+”月;
this.eventMap.put(日期,新事件(“Rosenmontag”);
}
私人假期(整年){
/*费尔塔奇假日酒店*/
这个.eventMap.put(“24.12”,新事件(“1.weihnachstag”);
}
void addstrong可移动度假地图(整数年){
addstrong假期(年);
新增可移动假日(年);
}
公共无效添加生日(字符串年份、事件){
this.eventMap.put(年份、事件);
}
公共HashMap getEventMap(){
返回事件图;
}
}
我希望你们能帮助我
致意
Manuellsen这两个事件对象是完全独立的。
swingFormatFunction
中的第一个是实例属性,ActionListener
中的第二个是局部变量。事件的
eventMap
属性也是一个实例属性,因此每个Event
对象都有自己的映射。也许你想共享一个eventMap
accross-all-events.那么你到底想问什么?如果您要求我们调试您的代码,那么这不是堆栈溢出的目的。如果你在问别的问题,请说清楚(并去掉那些与你的具体问题无关的代码);对不起,manicka理解我的问题我编辑了一点,但manicka理解了我,我认为他的解释比我的好你理解我的问题。有没有一个简单的方法来分享,或者我应该如何在你看来做到这一点。也许是单例事件?我的建议是将事件(也称为时间点/日历)和一组事件(eventMap)分离到它们自己的类中。然后将事件集传递给swingFormatFunction和ActionListener(通过构造函数、setter、DI等)。将其实现为单例是可能的解决方案之一。还有一点需要注意:如果可以从不同的线程访问事件集(AWT线程中的ActionListener和其他地方的swingFormatFunction,这是我从您的代码片段中猜出来的),那么请确保事件集是线程安全的