疯狂Java讲义432页习题CopyPerson出错(未解决)
来源:互联网 发布:阿里云服务器遭到攻击 编辑:程序博客网 时间:2024/05/16 08:18
用LocalObjectSelection实现Transferable接口。代码如下:
package test20160315;
import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.Transferable;import java.awt.datatransfer.UnsupportedFlavorException;import java.io.IOException;//LocalObjectSelection实现Transferable接口。public class LocalObjectSelection implements Transferable { private Object obj; public LocalObjectSelection(Object obj) { this.obj = obj; } @Override public Object getTransferData(DataFlavor arg0) throws UnsupportedFlavorException, IOException { // TODO Auto-generated method stub if (!isDataFlavorSupported(arg0)) { throw new UnsupportedFlavorException(arg0); } else if (arg0.equals(DataFlavor.stringFlavor)) { return obj.toString(); } else return obj; } @Override public DataFlavor[] getTransferDataFlavors() { // TODO Auto-generated method stub DataFlavor[] df = new DataFlavor[2]; @SuppressWarnings("rawtypes") Class c = obj.getClass(); String mimeType = "application/x-java-jvm-local-objectref;" + "class=" + c.getName(); //"application/x-java-jvm-local-objectref;class=Person" try { df[0] = new DataFlavor(mimeType); df[1] = DataFlavor.stringFlavor; return df; } catch (ClassNotFoundException e) { e.printStackTrace(); return null; } } @Override public boolean isDataFlavorSupported(DataFlavor arg0) { // TODO Auto-generated method stub return arg0.equals(DataFlavor.stringFlavor)|| arg0.getPrimaryType().equals("application") && arg0.getSubType().equals("x-java-jvm-local-objectref")&& arg0.getRepresentationClass().isAssignableFrom(obj.getClass()); }}
Person类的代码如下:
package test20160315; //普通人类public class Person { // 人的属性 // 年龄 int age; // 姓名 String name; public Person(String name, int age) { this.age = age; this.name = name; }}
CopyPerson类的代码如下:
package test20160315;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Frame;import java.awt.Label;import java.awt.Panel;import java.awt.TextArea;import java.awt.TextField;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.DataFlavor;public class CopyPerson { private Frame f = new Frame("CopyPerson"); private TextField name = new TextField(15); private TextField age = new TextField(15); private TextArea ta = new TextArea(3, 15); private Button copy = new Button("copy"); private Button paste = new Button("paste"); private Panel first = new Panel(); private Panel last = new Panel(); private Clipboard clipboard = new Clipboard("cp"); public void init() { first.add(new Label("name")); first.add(name); first.add(new Label("age")); first.add(age); f.add(first, BorderLayout.NORTH); f.add(ta, BorderLayout.CENTER); copy.addActionListener(e -> copyPerson()); paste.addActionListener(e -> { try { readPerson(); } catch (Exception e1) { e1.printStackTrace(); } }); last.add(copy); last.add(paste); f.add(last, BorderLayout.SOUTH); f.pack(); f.setVisible(true); } public static void main(String[] args) { // TODO Auto-generated method stub new CopyPerson().init(); } public void copyPerson() { Person p = new Person(name.getText(), Integer.parseInt(age.getText())); LocalObjectSelection ls = new LocalObjectSelection(p); clipboard.setContents(ls, null); } public void readPerson() throws Exception { try { DataFlavor personFlavor = new DataFlavor("application/x-java-jvm-local-objectref;class=Person"); if (clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor)) { Person p = (Person) clipboard.getData(personFlavor); ta.setText(p.toString()); } } catch (ClassNotFoundException e1) { e1.printStackTrace(); System.out.println("not found Person"); } catch (Exception e) { e.printStackTrace(); } }}
运行单击copy无任何提示,单击paste按钮出错。错误信息如下:
java.lang.ClassNotFoundException: Person
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at java.awt.datatransfer.DataFlavor.tryToLoadClass(Unknown Source)
at java.awt.datatransfer.DataFlavor.initialize(Unknown Source)
at java.awt.datatransfer.DataFlavor.init(Unknown Source)
at test20160315.CopyPerson.lambda1(CopyPerson.java:35)
at java.awt.Button.processEvent(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.access500(Unknown Source)
at java.awt.EventQueue3.run(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
感觉问题出在CopyPerson类的60行代码上
DataFlavor personFlavor = new DataFlavor("application/x-java-jvm-local-objectref;class=Person");
仔细核对,与书上代码一致。将Person中P小写,错误依旧。目前还没有找到原因。
- 疯狂Java讲义432页习题CopyPerson出错(未解决)
- 疯狂java讲义习题11.1
- 疯狂Java讲义习题11.2
- 疯狂Java讲义习题11.3
- 疯狂java讲义习题11.4
- 疯狂java讲义习题11.5
- 疯狂java讲义习题7.2
- 疯狂java讲义习题7.3
- 疯狂java讲义--第三章习题 画圆
- java基础学习(5)疯狂java讲义第4章课后习题解答源码
- java基础学习(6)疯狂java讲义第5章课后习题解答源码
- 疯狂java讲义第十六章(多线程)书后习题我的解答以及反思
- 疯狂java讲义中的习题,设计一个简单的计算器。
- 李刚java疯狂讲义(笔记)
- 《疯狂JAVA讲义》学习笔记(一)
- 学习java疯狂讲义笔记(连载)
- 《疯狂Java讲义》读书笔记(一)
- 疯狂Java讲义之内部类(二)
- 界面控件与事件(一、登录界面)
- qt中定时器的用法
- 第二周项目4-用循环求
- windows下,socket网络编程TCP
- android json解析java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1报错
- 疯狂Java讲义432页习题CopyPerson出错(未解决)
- BZOJ_P1076 [SCOI2008]奖励关(概率期望DP+状态压缩DP)
- iOS小技巧18-如何打包Ad Hoc ipa文件
- 怒刷蓝桥杯
- 28335学习笔记:asm(" RPT #N || NOP")
- 获取心率带的心率值,介绍核心蓝牙:构建一个心率监视器。
- PostgresXC:从源码编译、安装、配置数据库集群以及用pg_basebackup配置Datanode的热备份
- Android Runnable 运行在那个线程
- iOS中的事件传递和响应者链条