我的Java记事本出错

我的Java记事本出错,java,notepad,Java,Notepad,您好,这是我创建的第一个Java应用程序,我有一个错误,我感觉这是一个语法错误,但我找不到它,即使我用C语言编程++ /********************************** Notepad Created By Anmol Brar Free To Be Copied & Modified www.github.com/anmol-brar www.twitter.com/circlinq_anmol *********************

您好,这是我创建的第一个Java应用程序,我有一个错误,我感觉这是一个语法错误,但我找不到它,即使我用C语言编程++

/**********************************

   Notepad Created By Anmol Brar
   Free To Be Copied & Modified
   www.github.com/anmol-brar
   www.twitter.com/circlinq_anmol

**********************************/


package com.anmol.notepad;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;

import javax.swing.JColorChooser;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.ScrollPaneConstants;

public class Notepad extends JFrame implements ActionListener {

    // DEFINING MENUBAR
    JMenuBar mb;

    JMenu filemenu, editmenu, formatmenu, viewmenu, helpmenu;

    JMenuItem newitem, openitem, saveitem, saveasitem, pagesetupitem, printitem, exititem, undoitem, cutitem, copyitem,
            pasteitem, deleteitem, finditem, findnextitem, replaceitem, gotoitem, selectallitem, timeanddateitem,
            wordwrapitem, fontitem, statusbaritem, viewhelpitem, aboutnotepaditem;

    // CATEGORIZING MENUBAR SHORTCUT NAMES
    JTextArea ta;
    JScrollPane jsp;
    JFileChooser jfc;
    JColorChooser jc;

    // DEFINING FONT
    Font f = new Font("calbri", 4, 30);

    // CONSTRUCTOR
    public Notepad() {
        jfc = new JFileChooser();
        jc = new JColorChooser();
        ta = new JTextArea();
        ta.setFont(f);

        // MAKING SCROLLPANES
        int vsp = ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS;
        int hsp = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS;

        jsp = new JScrollPane(ta, vsp, hsp);
        add(jsp);

        // DEFINING MENUBAR/MAKING
        mb = new JMenuBar();
        setJMenuBar(mb);

        filemenu = new JMenu("File");
        filemenu = new JMenu("Edit");
        filemenu = new JMenu("Format");
        filemenu = new JMenu("View");
        filemenu = new JMenu("Help");

        // CREATING ITEMS
        mb.add(filemenu);
        mb.add(editmenu);
        mb.add(formatmenu);
        mb.add(viewmenu);
        mb.add(helpmenu);

        newitem = new JMenuItem("New");
        newitem.setAccelerator(KeyStroke.getKeyStroke('N', 1));
        openitem = new JMenuItem("Open");
        saveitem = new JMenuItem("Save");
        saveasitem = new JMenuItem("Save This File As....");
        pagesetupitem = new JMenuItem("Page Setup");
        printitem = new JMenuItem("Print This Document(Ctrl + P)");
        exititem = new JMenuItem("Exit This Document/Program :(");
        exititem.setAccelerator(KeyStroke.getKeyStroke('X', InputEvent.ALT_DOWN_MASK));
        undoitem = new JMenuItem("Undo");
        cutitem = new JMenuItem("Cut");
        cutitem.setAccelerator(KeyStroke.getKeyStroke('X', InputEvent.CTRL_DOWN_MASK));
        copyitem = new JMenuItem("Copy Text");
        pasteitem = new JMenuItem("Paste Text");
        deleteitem = new JMenuItem("Delete (Del)");
        finditem = new JMenuItem("Find Text/Word (Ctrl + F)");
        findnextitem = new JMenuItem("Find NextItem(F3)");
        replaceitem = new JMenuItem("Replace A Piece Of Text (Ctrl + H)");
        gotoitem = new JMenuItem("Goto... (Ctrl +  G)");
        selectallitem = new JMenuItem("Select All (Ctrl + A)");
        timeanddateitem = new JMenuItem("Time & Date (F5)");
        wordwrapitem = new JMenuItem("WordWrap Item...");
        fontitem = new JMenuItem("Color ");
        statusbaritem = new JMenuItem("Status Bar");
        viewhelpitem = new JMenuItem("View Help");
        aboutnotepaditem = new JMenuItem("About Notepad");
        filemenu.add(newitem);
        filemenu.add(openitem);
        filemenu.add(saveitem);
        filemenu.add(saveasitem);
        filemenu.addSeparator();
        filemenu.add(pagesetupitem);
        filemenu.add(printitem);
        filemenu.addSeparator();
        filemenu.add(exititem);
        editmenu.add(undoitem);
        filemenu.addSeparator();
        editmenu.add(cutitem);
        editmenu.add(copyitem);
        editmenu.add(pasteitem);
        editmenu.add(deleteitem);
        editmenu.addSeparator();
        editmenu.add(finditem);
        editmenu.add(findnextitem);
        editmenu.add(replaceitem);
        editmenu.add(gotoitem);
        editmenu.addSeparator();
        editmenu.add(selectallitem);
        editmenu.add(timeanddateitem);
        formatmenu.add(wordwrapitem);
        formatmenu.add(fontitem);
        viewmenu.add(statusbaritem);
        helpmenu.add(viewhelpitem);
        helpmenu.add(aboutnotepaditem);

        // SETTING THE TITLE/MAKING THE WINDOW
        setTitle("Untitled -- SwiftPad");
        setVisible(true);
        setExtendedState(MAXIMIZED_BOTH);

        newitem.addActionListener(this);
        openitem.addActionListener(this);
        saveitem.addActionListener(this);
        saveasitem.addActionListener(this);
        exititem.addActionListener(this);
        copyitem.addActionListener(this);
        cutitem.addActionListener(this);
        pasteitem.addActionListener(this);
        fontitem.addActionListener(this);
    }

    public void actionPerformed(ActionEvent ae) {
        if (ae.getSource() == exititem) {
            System.exit(0);
        }
        if (ae.getSource() == newitem) {
            ta.setText("");
        }
        if (ae.getSource() == copyitem) {
            ta.copy();
        }
        if (ae.getSource() == pasteitem) {
            ta.paste();
        }
        if (ae.getSource() == cutitem) {
            ta.cut();
        }
        if (ae.getSource() == openitem) {
            String s = ta.getText();
            if (!(s.equalsIgnoreCase(""))) {
                int opt = JOptionPane.showConfirmDialog(this, " Unsaved Documents! Do you want to save them? y/n? :)");
                if (opt == JOptionPane.YES_OPTION) {
                    jfc.showOpenDialog(this);
                    try {
                        FileWriter fw = new FileWriter(jfc.getSelectedFile());
                        String data = ta.getText();
                        fw.write(data + "\n");
                        fw.close();
                    } catch (Exception e) {
                        JOptionPane.showMessageDialog(this, "Error in Reading :(", "Error", JOptionPane.ERROR_MESSAGE);
                    }
                }
            } else {
                jfc.showOpenDialog(this);
                try {
                    FileReader fr = new FileReader(jfc.getSelectedFile());
                    BufferedReader br = new BufferedReader(fr);
                    String data = "";
                    ta.setText("");
                    while ((data = br.readLine()) != null) {
                        ta.append(data + "\n");
                    }
                    fr.close();
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(this, "Error In Opening :(", "Error", JOptionPane.ERROR_MESSAGE);

                }
            }
        }
        if(ae.getSource() == saveitem) {
            jfc.showSaveDialog(this);
            try {
                FileWriter fw = new FileWriter(jfc.getSelectedFile());
                String data = ta.getText();
                fw.write(data + "\n");
                fw.close();
            }catch (Exception e) {

                JOptionPane.showMessageDialog(this, "Error In Saving :(");

            }
        }

    }

    // RUNNING CLASS
    public static void main(String[] args) {
        new Notepad();
    }

}
这是我得到的错误,我用java制作了游戏,但得到过一次,但之后再也没有得到过。请帮助!:

  Exception in thread "main" java.lang.NullPointerException
    at java.awt.Container.addImpl(Unknown Source)
    at java.awt.Container.add(Unknown Source)
    at javax.swing.JMenuBar.add(Unknown Source)
    at com.anmol.notepad.Notepad.<init>(Notepad.java:79)
    at com.anmol.notepad.Notepad.main(Notepad.java:221)

谢谢你,安莫尔

您正在使用类的字段,但未正确初始化它们:

    filemenu = new JMenu("File");
    filemenu = new JMenu("Edit");
    filemenu = new JMenu("Format");
    filemenu = new JMenu("View");
    filemenu = new JMenu("Help");

    // CREATING ITEMS
    mb.add(filemenu);
    mb.add(editmenu);
    mb.add(formatmenu);
    mb.add(viewmenu);
    mb.add(helpmenu);
您只需初始化filemenu,但实际上使用了所有菜单字段。应该是这样的:

    filemenu = new JMenu("File");
    editmenu = new JMenu("Edit");
    formatmenu = new JMenu("Format");
    viewmenu = new JMenu("View");
    helpmenu = new JMenu("Help");

    // CREATING ITEMS
    mb.add(filemenu);
    mb.add(editmenu);
    mb.add(formatmenu);
    mb.add(viewmenu);
    mb.add(helpmenu);

mb.add方法引发NullPointerException,因为传递的参数为null,因为字段未初始化。

可能与代码示例中的请标记第79行重复。@Simz在执行此操作之前,我查看了该线程,但没有得到它it@still_learning我会的,这绝对不是语法错误。它编译得很好,但在运行时崩溃了。NullPointerException总是使用当前为null的变量的结果。谢谢你!您解决了我的问题,所以基本上我必须告诉java这些是对的???@AnmolBrar确切地说,您需要为字段分配实例。