这几天做项目,需要做一个类似于控制台的界面,可以将日志回显到一个文本区域里,几经查找,反复测试写了以下测试代码。
主程序
import java.io.PipedReader;
import java.io.PipedWriter;
import java.io.Writer;
import org.apache.log4j.Appender;
import org.apache.log4j.Logger;
import org.apache.log4j.WriterAppender;
public class Log4jMain {
static public Logger logger = Logger.getLogger(Log4jMain.class);
public static void main(String[] arg) {
Logger root = Logger.getRootLogger();
try {
Appender appender = root.getAppender("WriterAppender");
PipedReader reader = new PipedReader();
Writer writer = new PipedWriter( reader) ;
((WriterAppender) appender).setWriter(writer);
Thread t = new AaaThread(reader);
t.start();
Logger logger = Logger.getLogger(Log4jMain.class);
logger.error("asdf");
logger.info("asdf");
logger.debug("asdf");
logger.fatal("asdf");
//hh是一个class,test方法里只有几个logger.info("aaa"),用于测试用,这东西可以去掉
new HH().test();
} catch (Exception e) {
}
}
}
因为log4j提供的是 Writer,所以通过使用PipedWriter连接到PipedReader,并通过一个thread来处理PipedReader的数据就可以回显了。如果你需要的话可以将下面的System.out.println(scanner.nextLine());改成你需要显示的地方就行了。
import java.io.PipedReader;
import java.util.Scanner;
public class AaaThread extends Thread {
PipedReader reader;
public AaaThread(PipedReader reader) {
this.reader = reader;
}
public void run() {
Scanner scanner = new Scanner(reader);
while (scanner.hasNext()) {
System.out.println(scanner.nextLine());
}
}
}
posted @
2008-06-06 09:31 小平 阅读(1212) |
评论 (0) |
编辑 收藏
这里制作一个引子,具体内容比较多,而且hibernate文档里的hql篇写的很详细
可以这么用:
List list = getHibernateTemplate().find("select new map(t1.c1,t2.c3) from table1 t1 ,table2 t2 where t1.c1=t2.c2");
这样的话list里的每个元素都是一个map,每个map里包含两个元素
注意:这里的table1和table2都是class名并不是真的表名,毕竟这是hql。除了可以用map还还支持list和自定义的bean。
posted @
2008-04-17 17:05 小平 阅读(1881) |
评论 (0) |
编辑 收藏
DB2的Type-4驱动真的很诡异,配了两天没配上,发现是多引了一个包。就是他----“db2java.zip(db2java.jar)”只要有了他就算你已经引入了db2jcc.jar、db2jcc_license_cisuz.jar、db2jcc_license_cu.jar也没用。
不知道怎么回事,本以为多引就没错,没想到载这了。
顺便吧db2 type-4的配置方法贴下面:
jdbc:db2://ip:port/数据库
驱动名:com.ibm.db2.jcc.DB2Driver
我日他IBM!该死的IBM,我算是服了,配好的type-4驱动中文数据显示的全是乱码,准备切到type-2上试试,结构还是不行,查来查去是数据库pagecode的事,数据库的字符集改成gbk,客户端的pagecode也改成跟数据库一样的,ODBC算是能用了,type-2也能用了,然后又用type-4一试!连不上了!说字符集不匹配,上网一查说要使用IBM专用的JDK,我日了,换了IBM的JDK,配好环境变量eclipse又不能用了!我算是被IBM搞死了,一气之下也不准备再尝试type-4了。
我这里用的IBM JDK1.4,db2 V8
posted @
2008-04-17 16:51 小平 阅读(2482) |
评论 (3) |
编辑 收藏
近日抽风,想了解以下java与串口并口通讯的问题,上网查了半天,找到了sun几年前的一个破包,comm.jar
2.0版的,遇到一个比较奇怪的问题,这个包里的demo程序用cmd可以运行,但是用eclipse编译就不能运行,一直以为是dll库和配置文件的问题,几乎将两个文件copy到了系统中全部可能出现的地方都没有解决。百般无奈之下,找到了
http://blog.csdn.net/djsl6071/archive/2007/04/25/1583979.aspx这个博客,下载了rxtx把问题搞定了。
posted @
2008-04-17 16:40 小平 阅读(559) |
评论 (0) |
编辑 收藏
如果RMI客户端链接补上服务器可能是以下情况导致的:
1、网络不通
2、端口占用
3、防火墙(客户端机器的防火墙和服务器端的防火墙都有可能)
4、服务器端所在机器安装了linux虚拟机,或者使用的linux或者unix系统
排除办法:
前三种情况都很好解决,主要是最后一个,需要在rmi服务启动时加上一句
java -Djava.rmi.server.hostname=localhost ……
其中localhost可以强制定义为机器的IP地址
posted @
2008-02-15 14:11 小平 阅读(872) |
评论 (0) |
编辑 收藏
为了满足将plugin工程打成jar包,但是spring的配置文件不打进jar包的需求。很多时候我们为了可以方便手工配置spring的一些信息,而不用将jar解压而从新压缩,我们需要把Spring的配置文件放在plugin的jar包外这时,如果没有正确的使用spring的Resource就不能加载spring的配置文件,经过多次尝试终于找到一个比较合适的方法,与大家交流。
public static BeanFactory getFactory() {
if (factory == null) {
FileSystemResource resource = new FileSystemResource("appcontextclient.xml");
factory = new XmlBeanFactory(resource);
}
return factory;
}
将appcontextclient.xml文件放到工程根目录下,发布时将appcontextclient.xml放入到你的eclipse的安装目录即可(与eclipse的exe执行文件相同的位置),如果需要可在appcontextclient.xml文件前加入相关的路径来更改你的目录(但是有可能在调试过程中必须要把appcontextclient.xml文件放到你的eclipse IDE的安装目录里,因为大部分时间我们的eclipse IDE是何 workspace分开存放的,这样我们在调试的时候非常别扭,要到IDE里去修改配置文件)。
以上方法并不是唯一的,只是我感觉用起来比较合适的,这样在调试时既可以保证appcontextclient.xml文件在工程目录范围内,有可以在发布时使文件保持在安装目录而不是运行环境的workspace的临时目录里。
同时介绍几个方法可以eclipse方法获得eclipse工具的几个重要路径(注:"IDE"为我的plugin工程的PLUGIN_ID)
Platform.getInstallLocation().getURL()
file:/F:/tools/java/eclipse/eclipse-SDK-3.3-win32/eclipse/
这是我的eclipse IDE的安装目录
Platform.getLocation()
D:/runtime-IDE.product
这是我调试插件时生成的临时运行环境目录,是在调试IDE工程时生成的,就是发布时插件所属eclipse运行环境的WorkSpace目录
Platform.getInstanceLocation().getURL()
file:/D:/runtime-IDE.product/
这个跟上面的一样
Platform.getLocation()
D:/runtime-IDE.product
这个跟上面的也一样
Platform.getLogFileLocation()
D:/runtime-IDE.product/.metadata/.log
运行环境的日志文件路径,发布时插件所属eclipse运行环境的WorkSpace目录下的/.metadata/.log
Platform.getStateLocation(Platform.getBundle("IDE"))
D:/runtime-IDE.product/.metadata/.plugins/IDE
运行环境中IDE的一个临时目录,发布时插件所属eclipse运行环境的WorkSpace目录下/.metadata/.plugins/IDE
Platform.getUserLocation()
file:/C:/Documents and Settings/XX/user
这是我的文档的路径(把用户名X掉,哈哈)
Platform.getBundle("IDE").getLocation()
update@D:/WorkSpace/IDE/
我的IDE工程的路径,对应发布时插件的jar本身,在这个目录下的文件将全部包含在发不得jar里。
Platform.getConfigurationLocation().getURL()
file:/D:/WorkSpace/.metadata/.plugins/org.eclipse.pde.core/IDE.product/
eclipse IDE 自己建的目录
eclipse 本身也有很多加载资源文件的方法可以在org.eclipse.core.runtime.Platform这个类里找到,具体的就请大家找找API吧
posted @
2008-01-05 21:35 小平 阅读(2004) |
评论 (0) |
编辑 收藏