刚刚运行一个程序,遇到一些问题,望大神解答……
将一个文本区选中的文本复制到剪贴板并粘贴到另一个文本区中。
附代码:
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)
新手啊,求大神解决!
将一个文本区选中的文本复制到剪贴板并粘贴到另一个文本区中。
附代码:
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)
新手啊,求大神解决!
//在这里加上一行
menu = new Menu("mainmenu");
menubar.add(menu);
这里只是声明了Menu类型的变量menu,并没有实例化
还需要menu=new Menu();
lz对jvm的机制还不了解啊
声明的时候是在栈里面创建局部变量menu
new Menu()这一步在堆里开辟了内存空间存放Menu的对象
menu=new Menu(),menu引用这个对象