首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataOutputStream出错

DataOutputStream出错
EN

Stack Overflow用户
提问于 2012-08-21 09:05:44
回答 2查看 512关注 0票数 0

我一直收到NullPointerException,我不知道为什么。这个类应该做的是,将我在jtextfield中编写的任何内容作为writeUTF发送,但我一直收到一个NullPointerException

代码语言:javascript
复制
dos = new DataOutputStream(socket.getOutputStream());

GUI代码:

代码语言:javascript
复制
public class GUI {

private JFrame frame = new JFrame("Dryck & Ingrediens"); // GUI
private JTextField jtf = new JTextField();// GUI
private JTextArea jl1 = new JTextArea();// GUI
private JList jl = new JList();// GUI
private JScrollPane js = new JScrollPane(jl);// GUI
private DataOutputStream dos;// ServerHandler
private JLabel lab = new JLabel("Ange dryck");//GUI
private JLabel lab1 = new JLabel("Walid Shams");
private JLabel lab2 = new JLabel("Kushtrim Brahimi");
private HashMap<String, ArrayList<String>> drinkar = null;//Controller
private DataInputStream dis;
private Socket socket;
private ServerHandler serverH;

public GUI() {


    frame.getContentPane().setLayout(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(50, 300, 420, 400);
    frame.setResizable(false);
    frame.setVisible(true);
    js.add(jl);
    js.add(jl1);
    jl1.setEditable(false);
    lab.setBounds(170, 20, 130, 20);
    lab1.setBounds(300, 310, 130, 20);
    lab2.setBounds(300, 330, 130,20);
    jtf.setBounds(130, 40, 150, 40);
    jl.setBounds(50, 90, 150, 200);
    jl1.setBounds(210, 90, 150, 200);
    Container con = frame.getContentPane();
    con.setBackground(Color.cyan);

这就是错误发生的地方,也是我每次在jtextfield中输入内容时得到nullpointerexception的地方。

代码语言:javascript
复制
    jtf.addKeyListener(new KeyListener() {

        public void keyTyped(KeyEvent e) {
        }

        public void keyPressed(KeyEvent e) {
        }

        public void keyReleased(KeyEvent e) {

            if (dos == null) {
                if (jtf.getText().length() > 0) {
                    try {
                        dos = new DataOutputStream(socket.getOutputStream());
                        dos.writeUTF(jtf.getText());
                    } catch (IOException ex) {
                        Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } else {
                    String[] empty = new String[]{""};
                    jl.setListData(empty);
                }
            }

        }
    }
);


    jl.addListSelectionListener(new ListSelectionListener() {

        public void valueChanged(ListSelectionEvent e) {
             if (jl.getSelectedIndex() != -1) {
                 String item = (String) jl.getSelectedValue();
                 jl1.setText("");
                 for (String ingrediens : drinkar.get(item)) {
                     jl1.append(ingrediens + "\n");
                 }
             }else{
                 jl1.setText("");
             }
        }
    });
    frame.add(jtf);
    frame.add(jl);
    frame.add(jl1);
    frame.add(lab);
    frame.add(lab1);
    frame.add(lab2);
    frame.add(js);
}


// tar emot arrayen, lagrar i ny array och visar i JList
public void getArrayList() {

    String[] arr = null;
    for(int i = 0; i < arr.length; i++){
        arr = serverH.setList();
    }
    jl.setListData(arr);


}

public static void main(String[] args) {
    GUI g = new GUI();

}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-22 05:37:12

定义实例变量»serverH«

代码语言:javascript
复制
private ServerHandler serverH;

但是不要给它赋值任何对象。因此,您应该面对NullPointerException。你应该给它分配一个对象,例如

代码语言:javascript
复制
serverH = new ServerHandler();

这应该可以解决您关于NullPointerException的问题。

票数 0
EN

Stack Overflow用户

发布于 2012-08-21 09:07:57

关于:

代码语言:javascript
复制
dos = new DataOutputStream(socket.getOutputStream());

唯一可以抛出NPE的变量是socket,这就引出了一个问题:在哪里初始化socket?

答案是:你不需要。

解决方案:解决这个问题。

请始终检查抛出NPE的行上的变量,因为这会在99%的时间内显示错误的原因。您似乎还没有尝试过这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12047212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档