Java 无法获取新Putte的HashMap元素?

Java 无法获取新Putte的HashMap元素?,java,constructor,hashmap,elements,Java,Constructor,Hashmap,Elements,嘿,伙计们,我不知道发生了什么事?我添加了生日,但如果使用getHashMap调用它们,例如,我无法获取swingmenu类中的元素。我只是对这个问题有一些想法。我想这是因为我在一个类中调用了新事件,而在另一个类中输出hashmap时,我也调用了新事件。但我不知道我是否正确 也许任何解决办法都会对我有所帮助。如果你有问题,请问我。对我来说,学习新东西很重要。有一些短代码showen,因为它不相关。我调试了swingFormatFunction类,发现实例事件为null 此部分不会添加到我的Has

嘿,伙计们,我不知道发生了什么事?我添加了生日,但如果使用getHashMap调用它们,例如,我无法获取swingmenu类中的元素。我只是对这个问题有一些想法。我想这是因为我在一个类中调用了新事件,而在另一个类中输出hashmap时,我也调用了新事件。但我不知道我是否正确

也许任何解决办法都会对我有所帮助。如果你有问题,请问我。对我来说,学习新东西很重要。有一些短代码showen,因为它不相关。我调试了swingFormatFunction类,发现实例事件为null

此部分不会添加到我的HashMap中

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,这是我从您的代码片段中猜出来的),那么请确保事件集是线程安全的