Java 无法调用该方法或更改HashMap中的值

Java 无法调用该方法或更改HashMap中的值,java,hashmap,Java,Hashmap,因此,我首先定义了一个hashmap: HashMap<String, PrivateChat> hash = new HashMap<String, PrivateChat>(); 它什么也不做。为了证明这是真的,我试着: System.out.println(hash.get(name).ah); 输出为“”。 所以下次我尝试直接修改ah时: hash.get(name).ah += "hahaha"; 而奇怪的事情发生在我身上,啊还是没变 这确实是一个奇怪的问

因此,我首先定义了一个hashmap:

HashMap<String, PrivateChat> hash = new HashMap<String, PrivateChat>();
它什么也不做。为了证明这是真的,我试着:

System.out.println(hash.get(name).ah);
输出为“”。
所以下次我尝试直接修改ah时:

hash.get(name).ah += "hahaha";
而奇怪的事情发生在我身上,啊还是没变
这确实是一个奇怪的问题,我想以前没有人遇到过,因为我在stackoverflow上找不到任何结果

请帮忙:D谢谢

以下是我当前的PrivateChat代码:

class PrivateChat {
    public JPanel field1;
    public JTextArea textArea1;
    public JTextField textField1;
    public JButton Send;
    public JLabel eac;

    public String ah = "";

    PrivateChat(final String name, final BufferedWriter bw) {
        eac.setText("You are talking with " + name);
        textArea1.setEditable(false);
        Send.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                ArrayList<String> arr = new ArrayList<String>();
                arr.add(name);
                arr.add(textField1.getText());
                String nts = Convert.ConvertToString(arr);
                try {
                    bw.write("/tell");
                    bw.flush();
                    bw.write(nts);
                    bw.flush(); // Gut.
                    add("\n[you] " + textField1.getText());
                } catch (IOException e1) {
                    Send.setEnabled(false);
                    textField1.setEnabled(false);
                    textField1.setText("Failed: " + e1.toString());
                }
            }

        });
    }

    public void main(String name, BufferedWriter bw) {
        JFrame frame = new JFrame("PrivateChat");
        frame.setContentPane(new PrivateChat(name, bw).field1);
        frame.setPreferredSize(new Dimension(400, 300));
        // frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }

    public void add(String buf) {
        ah += buf;
        textArea1.setText(ah);
        System.out.println("added: " + ah);
    }
}
class PrivateChat{
公共JPanel field1;
公共区域文本区域1;
公共JTextField textField1;
公共按钮发送;
公共选举管理委员会;
公共字符串ah=“”;
PrivateChat(最终字符串名,最终缓冲写入器bw){
eac.setText(“您正在与“+名称”交谈);
textArea1.setEditable(false);
Send.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
ArrayList arr=新的ArrayList();
地址(姓名);
arr.add(textField1.getText());
字符串nts=Convert.ConvertToString(arr);
试一试{
写(“/告诉”);
bw.flush();
写(nts);
bw.flush();//Gut。
添加(“\n[您]”+textField1.getText());
}捕获(IOE1异常){
Send.setEnabled(false);
textField1.setEnabled(false);
textField1.setText(“失败:+e1.toString());
}
}
});
}
public void main(字符串名,BufferedWriter bw){
JFrame=新JFrame(“PrivateChat”);
frame.setContentPane(新PrivateChat(名称,bw).field1);
frame.setPreferredSize(新尺寸(400300));
//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
公共无效添加(字符串buf){
ah+=buf;
文本区域1.设置文本(ah);
System.out.println(“添加:“+ah”);
}
}

我已经测试了您所说的简化版本,但要证明它应该有效,这将是一个问题。正如其他注释中提到的,您可能有更多的内容要向我们展示,并且在代码中的某个地方可能会出现一些问题(抛出异常)。 另外,我强烈建议您将
ah
变量可见性更改为private,并使用访问器修改其值,您现在实现的方式并不安全

public class PrivateChat {

    public String ah = "";

    @Override
    public String toString() {
       return "PrivateChat{" +
            "ah='" + ah + '\'' +
            '}';
    }
}


你能发布你的私人聊天课程代码吗?看起来问题可能存在。请构造一个最小的测试用例。问题的根本原因似乎是在class
PrivateChat
@Trinimon我已经发布了我的代码。如果你愿意,请帮忙can@heo因此,您发布的代码不是您实际执行的代码。够了。发布一个完整的、最小的测试用例来再现问题。否则,我们都在浪费时间,没有例外;我甚至不需要试一下,那就是我感到奇怪的地方
public class PrivateChat {

    public String ah = "";

    @Override
    public String toString() {
       return "PrivateChat{" +
            "ah='" + ah + '\'' +
            '}';
    }
public class A {

    HashMap<String, PrivateChat> hash = new HashMap<String, PrivateChat>();

    public static void main(String[] args) {
        A a = new A();
        String myMapKey = "AAAA";
        a.hash.put(myMapKey, new PrivateChat());
        System.out.println("before modification:" + a.hash.get(myMapKey).ah);

        a.hash.get(myMapKey).ah += "blahblah";

        System.out.println("after modification:" + a.hash.get(myMapKey).ah);
    }
before modification:
after modification:blahblah