A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

开始运行还有用,一会就不行,帮我看下 这题是 模拟个电脑,定义好抽象USB接口,后期出现鼠标键盘的类 使用java反射机制关联并获取到 后期出现的类 通过在电脑端定义好的使用USB接口方法,实现运行后期出现的鼠标键盘等接口

522.png (140.14 KB, 下载次数: 20)

522.png

14 个回复

倒序浏览
package cn.itcast.day1;

import java.io.File;
import java.io.InputStream;
import java.util.Properties;



public class ReflectTest {


        public static void main(String[] args)throws Exception {
                 
                //笔记本电脑使用usb设备
               
                NoteBook computer = new NoteBook();
                computer.run();
               
                //关联配置文件
                /*File  file = new File("usb.properties");
                FileInputStream fis = new FileInputStream(file);*/
                InputStream ips = ReflectTest.class.getResourceAsStream("usb.properties");
                //将配置文件信息缓存到集合中,记住配置文件中新添加的类名需要加上具体的包名路径
                Properties ps = new Properties();
                ps.load(ips);
                System.out.println(ps.size());
                for(int x=1;x<=ps.size();x++){
                        String className = ps.getProperty("usb"+x);//获取配置文件中类名
                        Class clazz=Class.forName(className);//获取类的Class对象
                        USB usb = (USB)clazz.newInstance();//得到类实例
                        computer.useUSB(usb);//开始使用
                }
                ips.close();//关流

        }

}
        //usb接口
  interface USB{
                void open();
                void close();
        }
//笔记本电脑
  class NoteBook{
                public void run(){
                        System.out.println("NoteBook is run!");
                }
               
                public void useUSB(USB usb){
                        if(usb!=null){
                                usb.open();
                                usb.close();
                        }
                }               
}

//鼠标
class MouseUSB implements USB{
       
                public void open(){
                        System.out.println("Mouse is use");
                }
                public void close(){
                        System.out.println("Mouse is close");
                }
}

//键盘
class KeyUSB implements USB{
                public void open(){
                        System.out.println("Key is use");
                }
                public void close(){
                        System.out.println("Key is close");
                }
}
回复 使用道具 举报
表示还没到那个程度,继续学习
回复 使用道具 举报

回帖奖励 +1

前来学习
回复 使用道具 举报
className要带上包名吧~
回复 使用道具 举报
ZSMAN 发表于 2015-5-22 20:46
className要带上包名吧~

我试过了关联文件的 ,有包名 usb1 = cn.itcast.day1.MouseUSB
usb2 =cn.itcast.day1.KeyUSB
回复 使用道具 举报
ZSMAN 中级黑马 2015-5-26 17:51:55
7#
谢永烽 发表于 2015-5-26 15:02
我试过了关联文件的 ,有包名 usb1 = cn.itcast.day1.MouseUSB
usb2 =cn.itcast.day1.KeyUSB ...

注意usb.properties的写法!key=value,中间和结尾不要有空格!
回复 使用道具 举报 1 0
我去。。。这么牛逼。。
回复 使用道具 举报
谢永烽 黑马帝 2015-5-27 09:54:32
9#
ZSMAN 发表于 2015-5-26 17:51
注意usb.properties的写法!key=value,中间和结尾不要有空格!

果然是这个问题!感谢,一开始我是修改了里面的的value值,我说试试看不加包名 会报什么问题,后面添加回去的时候,可能多了空格!这个问题几天才解决 真悲哀- -还是谢谢黑马的兄弟!
回复 使用道具 举报
ZSMAN 发表于 2015-5-26 17:51
注意usb.properties的写法!key=value,中间和结尾不要有空格!

这里我再问下小哥,//关联配置文件
                 File  file = new File("usb.properties");
                FileInputStream fis = new FileInputStream(file);     如果我是使用的文件写入流关联配置文件,为什么系统会报说找不到文件呢?绝对路径我也试过了 依旧不知道问题在哪里,
回复 使用道具 举报
ZSMAN 中级黑马 2015-5-28 19:30:14
11#
谢永烽 发表于 2015-5-27 10:20
这里我再问下小哥,//关联配置文件
                 File  file = new File("usb.properties");
                FileInputStream fis ...

使用绝对路径没问题~你应该知道usb.properties应该放在哪里吧?在Workspaces中的bin文件夹中~注意路径的写法:\\或者/~绝对路径的写法不知道怎么弄,我现在在外面,明天回去再帮你看看~
回复 使用道具 举报
谢永烽 发表于 2015-5-27 10:20
这里我再问下小哥,//关联配置文件
                 File  file = new File("usb.properties");
                FileInputStream fis ...

这个找不到文件是异常还是你什么找不到文件?
找不到文件我一开始也有过, 后来setProperty仔细检查了下
是不是名字写错了这个也会出错, 因为反射大多都是运行时异常编译并看不出来。
回复 使用道具 举报
ZSMAN 中级黑马 2015-5-28 20:38:25
13#
谢永烽 发表于 2015-5-27 10:20
这里我再问下小哥,//关联配置文件
                 File  file = new File("usb.properties");
                FileInputStream fis ...

相对路径的写法:bin\\cn\\itcast\\day1\\usb.properties。eclipse中的根文件夹是project文件夹(workplace),相对路径从project文件夹开始写
回复 使用道具 举报
本帖最后由 谢永烽 于 2015-5-29 12:42 编辑
ZSMAN 发表于 2015-5-28 20:38
相对路径的写法:bin\\cn\\itcast\\day1\\usb.properties。eclipse中的根文件夹是project文件夹(workpla ...

NICE 果然如此,  这种FileInputStream文件写入流 是需要使用到完整路径,可能我之前没写对路径的原因
回复 使用道具 举报
开到荼靡 发表于 2015-5-28 19:47
这个找不到文件是异常还是你什么找不到文件?
找不到文件我一开始也有过, 后来setProperty仔细检查了下
...

是路径的问题,没有写完整路径,应该从工程文件夹开始写相对路径
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马