這幾天做項目,需要做一個類似于控制臺的界面,可以將日志回顯到一個文本區域里,幾經查找,反復測試寫了以下測試代碼。
主程序
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 小平 閱讀(1224) |
評論 (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 小平 閱讀(1893) |
評論 (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 小平 閱讀(2525) |
評論 (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 小平 閱讀(574) |
評論 (0) |
編輯 收藏
如果RMI客戶端鏈接補上服務器可能是以下情況導致的:
1、網絡不通
2、端口占用
3、防火墻(客戶端機器的防火墻和服務器端的防火墻都有可能)
4、服務器端所在機器安裝了linux虛擬機,或者使用的linux或者unix系統
排除辦法:
前三種情況都很好解決,主要是最后一個,需要在rmi服務啟動時加上一句
java -Djava.rmi.server.hostname=localhost ……
其中localhost可以強制定義為機器的IP地址
posted @
2008-02-15 14:11 小平 閱讀(886) |
評論 (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 小平 閱讀(2013) |
評論 (0) |
編輯 收藏
應要求在此提供ibatis批量插入demo下載,謝謝大家的關注,不過對于一些人的不禮貌行為我非常痛心。由于工作地點不能上網,不能上網,不能及時回復大家的留言我深表道歉。
下載
posted @
2007-12-27 19:52 小平 閱讀(3421) |
評論 (9) |
編輯 收藏
此問題網上大部分解決方法是這樣的:
1.網上鄰居->本地連接->屬性->internet協議(TCP/IP)->屬性->高級->wins標簽->去掉啟用LMhosts查詢前的勾.
2.控制面版->windows防火墻->高級標簽->本地連接設置->服務的標簽里勾選安全Web服務器(HTTPS)即可
但是我的機器按照上面操作apache服務仍然不可以使用,于是索性將服務中的Windows Firewall/Internet Connection Sharing (ICS的服務關掉了,發現問題解決了,apache可以用了。對于安全問題可以選擇第3方的防火墻來解決。
注意:費爾防火墻好像和apache沖突,也會導致WSASocket failed to open the inherited socket
posted @
2007-10-21 14:53 小平 閱讀(1462) |
評論 (1) |
編輯 收藏
今天用sun的jdk調的沒有一點問題的數據抽取程序,方放到AIX上后不能用了,oralce報出向一個字段中插入了過長的數據,可是程序在幾天前還是沒有問題的,后來分析可能是字符集導致的,因為前幾天修改過informix數據庫的字符集由8859-1轉為了zh_cn.gb18030-2000,但解決過程異常艱難,后來吧informix的url改為<value>jdbc:informix-sqli://xx.xx.xx.xx:8888/XXXX:informixserver=whcspdev;DB_LOCALE=zh_cn.gb18030-2000;CLIENT_LOCALE=zh_cn.UTF8(原為zh_cn.gb18030-2000);NEWCODESET=gb18030,gb18030-2000,5488,utf8</value>就可以了。后來猜測了一下原因:
1、oracle數據庫的jdbc驅動是是自動將數據庫的數據轉為unicode格式,這可能跟java的String默認為unicode有關,為了讓大家方便操作,
2、sun jdk的String在初始時用的是Unicode格式,ibm的jdk應該也是,但是有一點,sun的jdk在通過informix jdbc驅動取數據時不會將數據轉成其他字符集,而是仍然使用Unicode,而IBM的則是通過CLIENT_LOCALE=zh_cn.gb18030-2000配置將數據格式轉為了zh_cn.gb18030-2000。
所以在oracle作insert的時候就會由于字符集不匹配而報錯
posted @
2007-07-18 19:23 小平 閱讀(998) |
評論 (2) |
編輯 收藏