刚刚运行一个程序,遇到一些问题,望大神解答……
将一个文本区选中的文本复制到剪贴板并粘贴到另一个文本区中。
附代码:
import java.awt.*;
import java.awt.event.*;
import java.awt.datatransfer.*;class win736 extends Frame implements ActionListener {
MenuBar menubar;
Menu menu;
MenuItem copy, cut, paste;
TextArea text1, text2;
Clipboard clipboard = null;
win736() {
clipboard = getToolkit().getSystemClipboard(); // 获取系统剪贴板
menubar = new MenuBar();
copy = new Menu("Edit");
cut = new Menu("cut");
paste = new Menu("paste");
text1 = new TextArea(10, 20);
text2 = new TextArea(10, 20);
copy.addActionListener(this);
cut.addActionListener(this);
paste.addActionListener(this);
setLayout(new FlowLayout());
menubar.add(menu);
menu.add(copy);
menu.add(cut);
menu.add(paste);
setMenuBar(menubar);
add(text1);
add(text2);
setBounds(100, 100, 400, 350);
setVisible(true);
validate();
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
} public void actionPerformed(ActionEvent e) {
if (e.getSource() == copy) // 复制到剪贴板
{
String temp = text1.getSelectedText(); // 得到鼠标拖动选取的文本
StringSelection text = new StringSelection(temp);
clipboard.setContents(text, null);
} else if (e.getSource() == cut) // 剪切到剪贴板
{
String temp = text1.getSelectedText();
StringSelection text = new StringSelection(temp);
clipboard.setContents(text, null);
int start = text1.getSelectionStart();
int end = text1.getSelectionEnd();
text1.replaceRange("", start, end); // 从text1中删除被选取的文本
} else if (e.getSource() == paste) // 从剪贴板粘贴数据
{
Transferable contents = clipboard.getContents(this);
DataFlavor flavor = DataFlavor.stringFlavor;
if (contents.isDataFlavorSupported(flavor))
try {
String str;
str = (String) contents.getTransferData(flavor);
text2.append(str);
} catch (Exception ee) {
}
}
}
}public class lizi736 {
public static void main(String[] args) {
win736 w = new win736();
}}
由于本人新手暂时还不能附上截图,运行程序错误的内容给编辑上……Exception in thread "main" java.lang.NullPointerException
               at java.awt.MenuBar.add(Unknow Source)
               at win736.(init)(lizi736.java:23)
               at lizi736.main(lizi736.java:71)
新手啊,求大神解决!

解决方案 »

  1.   


                    //在这里加上一行
            menu = new Menu("mainmenu");
            menubar.add(menu);
      

  2.   

    Menu menu;
    这里只是声明了Menu类型的变量menu,并没有实例化
    还需要menu=new Menu();
    lz对jvm的机制还不了解啊
    声明的时候是在栈里面创建局部变量menu
    new Menu()这一步在堆里开辟了内存空间存放Menu的对象
    menu=new Menu(),menu引用这个对象
      

  3.   

    谢谢大家了,刚刚发完贴,回去仔细看了一哈,自己发现错误了,就是少了一句对menu的初始化,本人新手,积分估计不是很够就不结贴了,谢谢大家!