
2006年1月20日
這幾天用TimerTask作了個框架,擔(dān)心超過十萬條數(shù)據(jù)的時候速度變慢,其實每秒十萬次的運行速度等到以后放在服務(wù)器上運行應(yīng)該游刃有余吧,還不清楚,不過現(xiàn)在在我筆記本上運行得還可以,內(nèi)存吃的很大,java就這毛病,程序員不能自由釋放內(nèi)存。1G內(nèi)存不夠用,我筆記本2G有分配不了,似乎虛擬內(nèi)存java用不了,沒仔細(xì)做過實驗。
這幾天看新聞知道番茄花園作者被警方逮捕,樹大招風(fēng),槍打出頭鳥,很正常,從程序員的身份來講,盜版是要打擊的,不過我本身電腦里要付費的軟件都是盜版的,很矛盾,呵呵。
posted @
2008-08-21 23:54 nake 閱讀(2149) |
評論 (3) |
編輯 收藏
實在太久沒寫servlet了,應(yīng)該至少1年了,那時候做了點皮毛,現(xiàn)在項目要求用到servlet的相關(guān)知識,同時我在blogjava的bolg又開張了。學(xué)習(xí)的過程將記錄在我的blog中。對比了一下netbean和eclipse感覺用netbean編寫servlet程序方便些,eclipse用了幾年,但是還是感覺每次要找好相關(guān)的jar需要花費太多時間,于是決定用netbean編寫了。
posted @
2008-07-12 15:15 nake 閱讀(1945) |
評論 (2) |
編輯 收藏
看看以下代碼:
將26個英文字母重復(fù)加了5000次,
String tempstr = "abcdefghijklmnopqrstuvwxyz";
int times = 5000;
long lstart1=System.currentTimeMillis();
??String str ="";
??for(int i=0;i<times;i++)
??{
???str+=tempstr;
??}
??
??long lend1=System.currentTimeMillis();
??long time = (lend1-lstart1);
??System.out.println(time);
可惜我的計算機(jī)不是超級計算機(jī),得到的結(jié)果每次不一定一樣一般為 154735 左右。
也就是154秒。
我們再看看以下代碼
String tempstr = "abcdefghijklmnopqrstuvwxyz";
?
??int times = 5000;
long lstart2=System.currentTimeMillis();
??StringBuffer sb =new? StringBuffer();
??for(int i=0;i<times;i++)
??{
???sb.append(tempstr);
???
??}
??long lend2=System.currentTimeMillis();
??long time2 = (lend2-lstart2);
??System.out.println(time2);
?得到的結(jié)果為 16 有時還是 0
所以結(jié)論很明顯,StringBuffer 的速度幾乎是String 上萬倍。當(dāng)然這個數(shù)據(jù)不是很準(zhǔn)確。因為循環(huán)的次數(shù)在100000次的時候,差異更大。不信你試試。
下一次我將解釋為什么StringBuffer 的效率比String 高這么多。
posted @
2007-01-14 12:24 nake 閱讀(4220) |
評論 (4) |
編輯 收藏
swt 簡單的托盤程序
java寫和操作系統(tǒng)相關(guān)的程序難度非常大。在java 6出現(xiàn)之前,如果你想實現(xiàn)一個托盤程序,最簡單的就是用swt了。
通過google我找到了一段代碼。
其實很簡單。主要的代碼如下:
?????????????final Tray tray = display.getSystemTray();
??????????? final TrayItem trayItem = new TrayItem(tray, SWT.NONE);
??????????? Image image = new Image (display, 16, 16);
??????????? trayItem.setImage(image);
知道了重點,事情變的很簡單了??纯此谐绦?br />//-----------------
public class SystemTray extends Shell {
??? public static void main(String args[]) {
??????? try {
??????????? Display display = Display.getDefault();
??????????? SystemTray shell = new SystemTray(display, SWT.SHELL_TRIM);
?????????? // shell.createSystemTray(shell);
??????????? final Tray tray = display.getSystemTray();
??????????? final TrayItem trayItem = new TrayItem(tray, SWT.NONE);
??????????? Image image = new Image (display, 16, 16);
??????????? trayItem.setImage(image);
??????????? shell.open();
??????????? shell.layout();
??????????? while (!shell.isDisposed()) {
??????????????? if (!display.readAndDispatch())
??????????????????? display.sleep();
??????????? }
??????? } catch (Exception e) {
??????????? e.printStackTrace();
??????? }
??? }
??? public SystemTray(Display display, int style) {
??????? super(display, style);
??????? createContents();
??? }
??? /**
???? * Create contents of the window
???? */
??? protected void createContents() {
??????? setText("SWT Application");
??????? setSize(500, 375);
??? }
??? //swt 默認(rèn)情況下不允許shell被繼承
??? //所以我重載了父類的方法
??? protected void checkSubclass() {
???????? }
}
//--------------------
如果你想成功運行以上代碼,你最好在eclipse下新建一個swt的類。具體操作你搜索一下吧。
但是上面的代碼只是加入了托盤,這可能是最簡單的實現(xiàn)托盤的程序了。我們加入事件處理,讓程序能夠最大和最小化。然后把托盤用圖片來表示。
詳細(xì)的代碼不參考
下載
到eclipse里運行
posted @
2007-01-03 22:58 nake 閱讀(3413) |
評論 (4) |
編輯 收藏
從8.1號開始,連續(xù)加班,再過1小時結(jié)束。
posted @
2006-09-21 02:39 nake 閱讀(976) |
評論 (4) |
編輯 收藏
排序的算法是我們最常用的算法,初學(xué)程序,每個人都嘗試過排序。但只是局限于簡單的排序。
如將下列數(shù)字進(jìn)行排序
1,3,5,8,3,6
于是我們得出結(jié)果
1,3,3,5,6,8
將下列字母(字符)進(jìn)行排序
a,i,e,f,w,s
于是我們得出結(jié)果
a,e,f,i,s,w
但是我們遇到的情況就不是如此簡單了。如給公司里的商品進(jìn)行排序,我們很輕易的想到按照商品的名稱排序不就完了,而且簡單明了。但現(xiàn)實并如我們相信般簡單。同一商品名稱可以有不同的批次,進(jìn)貨時間,可能還會有單價的不同。顯然只根據(jù)商品名稱排序是不合理的。
再舉個簡單例子然后用程序?qū)崿F(xiàn)。如公司要將員工進(jìn)行排序(不要說領(lǐng)導(dǎo)排在前面),假設(shè)我們的需求比較復(fù)雜。先進(jìn)行姓排序,誰的姓拼音靠前,誰就排前面。然后對名字進(jìn)行排序。恩.如果同名,女性排前頭。如果名字和性別都相同,年齡小的排前頭。ok,一個也不算復(fù)雜的需求。
如果對java比較熟悉的會知道java.util.Comparator 接口。要實現(xiàn)里面的函數(shù)
?int compare(Object o1, Object o2) 返回一個基本類型的整型,返回負(fù)數(shù)表示o1 小于o2,返回0 表示o1和o2相等,返回正數(shù)表示o1大于o2。
于是我們設(shè)計的人員類要有幾個變量,firstname,lastname,sex,age分別表示姓,名,性別,年齡。
public class Person {
? String firstname,lastname;
? Boolean sex;
? Integer age;
? public Person(String firstname,String lastname,Boolean sex,Integer age) {
??? this.firstname = firstname;
??? this.lastname = lastname;
??? this.sex = sex;
??? this.age = age;
? }
? public String getFirstName() {
???? return firstname;
?? }
?? public String getLastName() {
???? return lastname;
?? }
?? public Boolean getSex() {
????? return sex;
??? }
??? public Integer getAge() {
????? return age;
??? }
//為了輸入方便,重寫了toString()
public String toString()
??? {
????? return firstname +" "+lastname+" "+(sex.booleanValue()?"男":"女")+" "+age;
??? }
}
//end person
下面是要實現(xiàn)比較器
public class Comparators {
? public static java.util.Comparator getComparator() {
??? return new java.util.Comparator() {
????? public int compare(Object o1, Object o2) {
??????? if (o1 instanceof String) {
????????? return compare( (String) o1, (String) o2);
??????? }
?????? else if (o1 instanceof Integer) {
????????? return compare( (Integer) o1, (Integer) o2);
??????? }
?????? else if (o1 instanceof Person) {
????? return compare( (Person) o1, (Person) o2);
??? }
??????? else {
????????? System.err.println("未找到合適的比較器");
????????? return 1;
??????? }
????? }
????? public int compare(String o1, String o2) {
??????? String s1 = (String) o1;
??????? String s2 = (String) o2;
??????? int len1 = s1.length();
??????? int len2 = s2.length();
??????? int n = Math.min(len1, len2);
??????? char v1[] = s1.toCharArray();
??????? char v2[] = s2.toCharArray();
??????? int pos = 0;
??????? while (n-- != 0) {
????????? char c1 = v1[pos];
????????? char c2 = v2[pos];
????????? if (c1 != c2) {
??????????? return c1 - c2;
????????? }
????????? pos++;
??????? }
??????? return len1 - len2;
????? }
????? public int compare(Integer o1, Integer o2) {
??????? int val1 = o1.intValue();
??????? int val2 = o2.intValue();
??????? return (val1 < val2 ? -1 : (val1 == val2 ? 0 : 1));
????? }
????? public int compare(Boolean o1, Boolean o2) {
???????? return (o1.equals(o2)? 0 : (o1.booleanValue()==true?1:-1));
?????? }
????? public int compare(Person o1, Person o2) {
??????? String firstname1 = o1.getFirstName();
??????? String firstname2 = o2.getFirstName();
??????? String lastname1 = o1.getLastName();
??????? String lastname2 = o2.getLastName();
??????? Boolean sex1 = o1.getSex();
??????? Boolean sex2 = o2.getSex();
??????? Integer age1 = o1.getAge();
??????? Integer age2 = o2.getAge();
??????? return (compare(firstname1, firstname2) == 0 ?
??????????????? (compare(lastname1, lastname2) == 0 ? (compare(sex1, sex2) == 0 ? (compare(age1, age2) == 0 ? 0 :
???????????????? compare(age1, age2)) :
???????????????? compare(sex1, sex2)) :
???????????????? compare(lastname1, lastname2)) :
??????????????? compare(firstname1, firstname2));
????? }
??? };
? }
}
以上代碼有可能因為瀏覽器的布局自動換行。
compare(Person o1, Person o2)的返回值看起來比較別扭。最簡單的是
??? public int compare(Boolean o1, Boolean o2) {
???????? return (o1.equals(o2)? 0 : (o1.booleanValue()==true?1:-1));
?????? }
o1和o2相等返回0,否則o1如果是true 就表示o1大于o2。
再嘗試輸出結(jié)果看看
public class Main {
? public Main() {
? }
? public static void main(String[] args) {
??? Person[] person = new Person[] {
???????? new Person("ouyang", "feng", Boolean.TRUE, new Integer(27)),
???????? new Person("zhuang", "gw", Boolean.TRUE, new Integer(27)),
???????? new Person("zhuang", "gw", Boolean.FALSE, new Integer(27)),
???????? new text.Person("zhuang", "gw", Boolean.FALSE, new Integer(2)),
???? };
???? for (int i = 0; i < person.length; i++) {
?????? System.out.println("before sort=" + person[i]);
???? }
???? java.util.Arrays.sort(person, Comparators.getComparator());
? for (int i = 0; i < person.length; i++) {
??? System.out.println("after sort=" + person[i]);
? }
? }
}
輸出結(jié)果:
before sort=ouyang feng 男 27
before sort=zhuang gw 男 27
before sort=zhuang gw 女 27
before sort=zhuang gw 女 2
after sort=ouyang feng 男 27
after sort=zhuang gw 女 2
after sort=zhuang gw 女 27
after sort=zhuang gw 男 27
仔細(xì)理解java的Comparator會給你寫排序帶來很大幫助
?
posted @
2006-05-27 17:20 nake 閱讀(2286) |
評論 (5) |
編輯 收藏
?
軟件項目,特別是給企業(yè)用戶的項目,實施過程大多辛苦,而且一部分問題不在于軟件本身。
總結(jié)一下項目最后驗收階段案例之一。
案例:項目已經(jīng)按照客戶確認(rèn)的調(diào)研文檔完成實施工作??蛻舻囊话咽痔岢鲂滦枨?。
此一把手H,H精通業(yè)務(wù),對電腦一竅不通。H對手下電腦部負(fù)責(zé)人Z提出“要對業(yè)務(wù)進(jìn)行風(fēng)險管理,把風(fēng)險大的業(yè)務(wù)提出來?!?,一句話令Z頭大。Z苦惱H沒有定義什么是風(fēng)險大,即使H說明風(fēng)險大的條件,現(xiàn)有的軟件架構(gòu),數(shù)據(jù)模型能否實現(xiàn)還是未知數(shù)。實現(xiàn)此功能成為不可完成的任務(wù)。持續(xù)下去Z和項目經(jīng)理W(軟件公司負(fù)責(zé)人)都面臨困境。
Z會被認(rèn)為沒有完成領(lǐng)導(dǎo)安排的工作(實際上他忙的焦頭爛額)。
W進(jìn)入兩難,一方面客戶要求的完成不了,另一方面面臨公司的的項目要拖延。
解決辦法:1.按章辦事,調(diào)研文檔已經(jīng)寫清楚無此需求。直接拒絕。此為下策,沒辦法才用,但是關(guān)鍵時刻很有用。
2.引導(dǎo)+忽悠。對付H這種老總要從其公司內(nèi)部出發(fā)。分析滿足他需求所需要的條件。一般要犧牲部分工作人員的工作時間。然后把影響放大,嚇唬他。如果可以的話可以找他們的相關(guān)人員幫忙,讓他聽到不同的聲音,讓他放棄此念頭。因為軟件他是外行,談?wù)撥浖r心里沒底氣,有自己人反對,心虛。
比如從財務(wù)著手比較有效。要滿足H的需求改變了財務(wù)的核算體系,原有的數(shù)據(jù)都要加上某寫核算項,不能保證數(shù)據(jù)準(zhǔn)確性,而且大大增加了財務(wù)工作量,而且不符合會計制度(忽悠)。上策!
posted @
2006-05-16 17:46 nake 閱讀(3245) |
評論 (2) |
編輯 收藏
轉(zhuǎn)載請注明出處:http://www.tkk7.com/nake/
???自從
java
發(fā)布的第一個版本開始就已經(jīng)包含
JDBC
了。目前已經(jīng)有
10
個年頭了。
JDBC4.0
將要被打包到
java6.0
里(
java SE
是
J2SE
新的名字)。它展現(xiàn)設(shè)計的重大提升和提供更加豐富的
API
,更加重視簡易開發(fā)和提高生產(chǎn)力
。
??????
本文將討論一些
JDBC
在改善設(shè)計和提高性能上的重要的變化。但是不能列舉每一個變化。
注解和泛型
我想你已經(jīng)了解了包含在
JAVA 5.0
的注解(
annotations
)
和泛型(
generic
也有翻譯范型)。
JDBC4.0
也引進(jìn)了注解和泛型
DataSet
,這使得執(zhí)行
sql
語句和
SQL? DML
(
data manipulation? language
)
定義變的簡單。
??????
在新的
API
里定義了一套
Query
和
DataSet
接口。
Query
接口定義了一套方法,這些方法描述了
SQL
的
select
和
update
語句。而且詳細(xì)介紹了結(jié)果集如何綁定為一個
DataSet
的。因為泛型所以
DataSet
是可以帶參數(shù)的。因此可以說
DataSet
接口是類型安全的(
type-saft
)
.
所有
Query
接口都要從
BaseQuery
接口繼承??梢酝ㄟ^
Connection.createQueryObject()
或者
DataSource.createQueryObject()
得到Query對象。
一個DataSet接口都繼承java.util.List。
? DataSet
是有列概念的數(shù)據(jù)集,能從
Query
接口得到,并且可以帶有參數(shù)。
DataSet
可以在連接和斷開連接的情況下使用。從而
DataSet
實現(xiàn)了
ResultSet
(連接)
或者
?
CachedRowSet
(可以斷開連接)。因為DataSet是java.util.List的子接口,所以可以通過java.util.Iterator來訪問每一行。
DataSet
接口可以帶系統(tǒng)或者用戶自己定義的類作為參數(shù)。通過兩種方法你可以實現(xiàn):構(gòu)造函數(shù)或者
JavaBeans
對象,任何一個辦法都能達(dá)到將用戶自定義的類綁定到結(jié)果集的列里。但是在其它支持
JavaBeans
的框架里,用
JavaBeans
對象的實現(xiàn)就顯更加容易使用。
下面簡單舉例說明如何通過新的
API
創(chuàng)建和運行
SQL
查詢。用用戶自定義的類來定義結(jié)果集。(拷貝時候小心有制表符)
pubic class Employee {
?? private int employeeId;
?? private String firstName;
?? private String lastName;
?? public int getEmployeeId() {
??????return employeeId;
?? }
??
?? public setEmployeeId(int employeeId) {
??????this.employeeId = employeeId;
?? }
?? public String getFirstName() {
??????return firstName;
?? }
?? public setFirstName(String firstName) {
??????this.firstName = firstName;
?? }
?? pubic String lastName() {
??????return lastName;
?? }
?? public setLastName(String lastName) {
??????this.lastName = lastName;
?? }
}
interface EmployeeQueries extends BaseQuery {
?? @Select (sql="SELECT employeeId, firstName, lastName FROM employee")
?? DataSet<Employee> getAllEmployees ();
?? @Update (sql="delete from employee")
?? int deleteAllEmployees ();
}
Connection con = ...
EmployeeQueries empQueries = con.createQueryObject (EmployeeQueries.class);
DataSet<Employee> empData = empQueries.getAllEmployees ();
?
異常處理的增強:
1.??????
為
SQLException
分為兩類
transient
和
non-transient
。
2.??????
支持連鎖的異常。
3.??????
繼承了
Iterable
接口。
因為繼承了Iterable 所以你可以這樣寫:
catch(SQLException ex) {
?? for(Throwable t : ex) {
??????System.out.println("exception:" + t);
?? }
}
參考
http://www.javaworld.com/javaworld/jw-05-2006/jw-0501-jdbc.html
JSR 221: JDBC 4.0 Specification:
http://www.jcp.org/en/jsr/detail?id=221
未完
posted @
2006-05-11 22:26 nake 閱讀(6768) |
評論 (4) |
編輯 收藏
?????????陳水扁一邊嗆美,另一邊卻熱情對待布什夫人;他前天(2006-5-9)在哥斯達(dá)黎加總統(tǒng)就職大典上兩度“突襲”美國總統(tǒng)夫人勞拉的畫面,昨天一整天在臺灣島內(nèi)電視熱播。
當(dāng)時正舉行哥國總統(tǒng)就職大典,陳水扁坐在第一排,勞拉則坐在第二排。阿扁不時轉(zhuǎn)頭瞄向左后方的勞拉,等到表演節(jié)目開始時,扁跨步越過身邊所有人走到勞拉身旁寒暄。據(jù)說,扁邀請勞拉到臺灣訪問,勞拉則禮貌性回答“謝謝”。
?????????至典禮結(jié)束時,全場嘉賓起身鼓掌,扁忽然再一個箭步?jīng)_向勞拉。勞拉表情有些錯愕,但雙手繼續(xù)鼓掌。扁此時伸出右手,懸空一陣后主動去輕抓勞拉正在鼓掌的手,迫使勞拉不得不與他相握。手一握到,扁立刻雙手緊抓不放,左手還不斷拍打,勞拉的另一只手此時卻不期然地移到自己胸前捂住,還下意識地抓緊了衣領(lǐng)。同時,扁的傳譯員卻已擺好了相機(jī),扁示意勞拉對著鏡頭微笑,終于完成了這張與總統(tǒng)夫人微笑握手的歷史合照。
原文出自
http://www.zaobao.com/gj/zg060511_501.html
posted @
2006-05-11 19:23 nake 閱讀(496) |
評論 (1) |
編輯 收藏
? 整整一天的時間都在查bug,對數(shù),然后找到錯誤的原因。需要我認(rèn)真,仔細(xì),不要放棄,不要繞過困難。找bug需要方法和耐心,要記錄下多種數(shù)據(jù)和過程,不要做無頭蒼蠅,如果數(shù)據(jù)像今天一樣多要先給數(shù)據(jù)分類分段排除。
posted @
2006-05-09 23:50 nake 閱讀(373) |
評論 (0) |
編輯 收藏
???最近看2本書,一本關(guān)于ajax的,一本是《Agile Software Develpment》。先看ajax,我實在不想公布它的書名,感覺被騙了,廣告做得好,翻譯和內(nèi)容都很差?!禔gile Software Develpment》還行,同時也學(xué)習(xí)了英文,是本值得細(xì)讀得書。
posted @
2006-04-24 22:39 nake 閱讀(397) |
評論 (0) |
編輯 收藏
???周六周日抽空完成了Table類的排序和搜索功能。搜索速度還能接受,搜索2萬條記錄沒感覺到停頓,更多的記錄我還沒測試,排序就夠嗆,起初花了30分鐘還沒完成,郁悶!comparator要進(jìn)行優(yōu)化。
? public int compare(Number o1, Number o2) {
??? double n1 = o1.doubleValue();
??? double n2 = o2.doubleValue();
??? if (n1 < n2) {
????? return -1;
??? } else if (n1 > n2) {
????? return 1;
??? } else {
????? return 0;
??? }
? }
感覺應(yīng)該還好,應(yīng)該是其它地方?jīng)]處理好。
接下來我要處理
1.改變JTable原來的UI 在table底下加入可以匯總的表格
2.JTable類在瀏覽器上的表現(xiàn)
3.dataset直接的關(guān)聯(lián)在table中實現(xiàn)
posted @
2006-04-18 20:43 nake 閱讀(446) |
評論 (0) |
編輯 收藏
? ? 好像是兩年前第一次接觸eclipse,不記得版本號了。那時候eclipse小有名氣,可能是本身喊的出名字的工具就只有jb。公司買的是jb6,但是我們都貪新,用剛出的jb9。結(jié)果因為用盜版被borland協(xié)同工商罰了好多錢(你不信就開防火墻,用jb調(diào)試程序,看看防火墻情況)。從此公司開始使用eclipse。
?? ?正是eclipse由IBM等出資和開源的緣故有人說eclipse是六大門派里的少林,聽起來有點道理。武當(dāng)派(jboss)已經(jīng)歸于redhat名下(我不喜歡jboss因為他的名字里有個Boss)??赡芪液芟矚geclipse了,生怕有一天開始收費,或者被收購,畢竟不是原滋原味。
??? eclipse發(fā)展太快,幾乎一個月一個Milestone,現(xiàn)在是3.2M6了,最后一個M。如果按照此速度4月要出3.2的stable build版本的RC1了。其中一項新特性是速度有所提升。看看我為了玩java我機(jī)器的配置吧。
posted @
2006-04-13 23:27 nake 閱讀(237) |
評論 (0) |
編輯 收藏
今晚無聊 用google google 了google 有2,580,000,000項符合查詢結(jié)果。無意中有看到新成員froogle 。google家族成員越來越多,可是中文版出得就相對慢,而且不一定能順利在中國推廣,或者以后google沒個家族成員都有類似提示據(jù)當(dāng)?shù)胤煞ㄒ?guī)和政策,部分搜索結(jié)果未予顯示。
喜歡google,喜歡他簡潔、快速。
posted @
2006-04-05 00:32 nake 閱讀(238) |
評論 (0) |
編輯 收藏
Table類的mind圖.
計.jpeg)
當(dāng)然還有TableModel 沒有畫進(jìn)來,因為它將會是變化多端的.code_name_map也沒有畫.還有輔助錄入以前寫過就不說了.
事件的處理以后再花時間寫清楚了.
posted @
2006-03-29 23:29 nake 閱讀(944) |
評論 (3) |
編輯 收藏
今晚一邊考慮了DataRow,Cell,DataSet,DataTable,Connect,DataProvider的構(gòu)架一邊看 《一球成名》,覺得很愜意.
posted @
2006-03-28 23:07 nake 閱讀(429) |
評論 (0) |
編輯 收藏
我的工作就是和數(shù)據(jù)庫打交道,數(shù)據(jù)庫當(dāng)然離不開dataset,用了幾年borland的dx.jar. borland這次看來真的玩完了.回想borland的歷史,每次危機(jī)時刻都有英雄出現(xiàn),扭轉(zhuǎn)局面.但愿這次也如此.
我近段時間要完成的工作:
1.完善我的dataset.
2.實現(xiàn)table里的過慮,快速查找等功能
接下來我才考慮用以上模塊實現(xiàn)項目管理軟件.
posted @
2006-03-27 23:57 nake 閱讀(265) |
評論 (0) |
編輯 收藏
Subversion 已經(jīng)代替了CVS,至少在
SourceForge上是如此.我花了一個晚上時間玩玩.原來在公司用vss,感覺能用就將就了.畢竟用哪個版本控制器不重要.
posted @
2006-03-27 23:43 nake 閱讀(232) |
評論 (0) |
編輯 收藏
java 的Table類采用了MVC模式,所以設(shè)計出多種視圖相對容易.
但是在工作中為了如果Table里的數(shù)據(jù)能用Tree的方式組織起來,數(shù)據(jù)會更加緊湊,結(jié)構(gòu)清晰.
效果如圖:但是往往工作中數(shù)據(jù)沒那么少,那么簡單

下圖是樹型圖的思維圖

基本上程序上要寫的地方有:
1.實現(xiàn)TreeModel接口,
同時實現(xiàn)TableModel中幾個必要函數(shù)
public Class getColumnClass(int column);
public int getColumnCount();
public String getColumnName(int column);
public Object getValueAt(Object node, int column);
public boolean isCellEditable(Object node, int column);
public void setValueAt(Object value, Object node, int column);
使tree和table能相互結(jié)合使用
2.繼承AbstractTableModel
將1中繼承TreeModel和此結(jié)合
3.繼承TableCellRenderer
要覆蓋paint,updateUI 要實現(xiàn)getTableCellRendererComponent
4.TreeModelListener的實現(xiàn)了
整體的代碼不長 但花了我不少時間.需要的話留下mail吧.
此代碼還有不完善的地方.如和sql結(jié)合.
posted @
2006-03-11 13:15 nake 閱讀(2912) |
評論 (45) |
編輯 收藏
春節(jié)是中國人傳統(tǒng)節(jié)日一年的開始。
一年的開始......
埃及海難,人們大罵船長不該跑該死,埃及人都學(xué)會了“都坐下不要動,讓領(lǐng)導(dǎo)先走”。
美國防部將中國列為“最具軍事威脅國家”,米國人本應(yīng)該出中文版《四年防務(wù)評估報告》,competition 對抗;競爭行為,如為了利益或獎品;敵對 。 menace 威脅;可能發(fā)生之危險;威脅。我英文不好就只能借助英語字典了。
菲律賓體育場發(fā)生踩踏事件,他死因為他窮。
IAEA理事會決定把伊朗核問題報告安理會。絕不讓流氓國家menace 我們泱泱大國。
我,我把我的程序整理了一遍,加了注釋,打成工具包。
我,制定了一份偉大的、可持續(xù)使用的、為別人打工的工作計劃(三的計劃)。
posted @
2006-02-05 21:45 nake 閱讀(302) |
評論 (0) |
編輯 收藏
在http://www.mysql.com/ 下載Query Browser
運行時需要libstdc++.so.5
原來它藏在compat-libstdc++-8-3.3.4.ix86_64.rpm
找了我超過4個小時。在http://download.fedora.redhat.com/pub/fedora/linux/core/4/x86_64/os/Fedora/RPMS/找到,需要下載下來然后
rpm -ivh compat-libstdc++-8-3.3.4.ix86_64.rpm
當(dāng)然在這之前可能要chmod -R 755 compat-libstdc++-8-3.3.4.ix86_64.rpm
posted @
2006-01-27 03:01 nake 閱讀(315) |
評論 (0) |
編輯 收藏
原文來自http://fanqiang.chinaunix.net/app/web/2005-08-30/3548.shtml
Linux+Apache+Mysql+PHP典型配置 |
作者:張微波 來源:5ilinux
|
|
|
Linux+Apache+Mysql+PHP典型配置
調(diào)試環(huán)境:Redhat9.0 Apache1.3.29 Mysql3.23.58 PHP4.3.4 Linux系統(tǒng)的安裝我就不講了,這是基本功,其實這篇文章在類似Redhat的其他linux也應(yīng)該通用,大家只要掌握我提供的方法就行。記得安裝 Redhat9。0的時候不要安裝系統(tǒng)默認(rèn)的apache,mysql和php以及相關(guān)的軟件。已經(jīng)安裝的請用rpm -e * 刪除已經(jīng)安裝的包。
1.安裝Mysql3.23.58
其實老實說直接安裝Mysql官方網(wǎng)站提供的rpm包也是一個比較可行的辦法,他的官方網(wǎng)站的rpm包的提供基本跟tar包發(fā)行是同步的,這點我比較喜歡,至少安裝rpm包的在后面的調(diào)試中不會出現(xiàn)mysql庫文件找不到的情況。但這里還是有必要講一下自定義安裝的步驟,畢竟網(wǎng)友自定義安裝的還說挺多的。
軟件獲?。篬url]http://www.mysql.com/downloads/index.html[/url]
安裝步驟:
tar zxvf mysql-3.23.58.tar.gz cd mysql-3.23.58 ./configure --prefix=/usr/local/mysql --sysconfdir=/etc --localstatedir=/var/lib/mysql make make install #prefix=/usr/local/mysql mysql安裝的目標(biāo)目錄 #sysconfdir=/etc my.ini配置文件的路徑 #localstatedir=/var/lib/mysql 數(shù)據(jù)庫存放的路徑 安裝完以后要初始化數(shù)據(jù)庫,當(dāng)然你是升級的話不用做這步; /usr/local/mysql/bin/mysql_install_db 如果系統(tǒng)沒有mysql這個用戶的話,最好做以下這步: useradd -M -o -r -d /var/lib/mysql -s /bin/bash -c "MySQL Server" -u 27 mysql 然后我啟動mysql /usr/local/mysql/bin/safe_mysqld |
ok,先看看mysql能否正常工作 mysql -uroot mysql
一般情況下都是不能正常鏈接數(shù)據(jù)庫,錯誤提示一般為:
ERROR 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
其實網(wǎng)上大家問的最多的都是整個問題,說什么鏈接不到mysqld.sock,其實大家不妨看看mysql的錯誤日志就明白怎么回事,我這里的錯誤日志是在/var/lib/mysql/*.err.
你會發(fā)現(xiàn)mysql只所以不能啟動,是因為/var/lib/mysql的權(quán)限不允許mysql服務(wù)訪問,英文mysql默認(rèn)是調(diào)用mysql用戶來啟動服務(wù)的,好了,既然知道是什么原因找到不能啟動,那就簡單了。我們只要chown -R mysql:mysql /var/lib/mysql就行,如果還是啟動不了,再慢慢調(diào)試權(quán)限,反正一般啟動不了都是權(quán)限的問題。
如果大家還是不能啟動不了的話,那就用我的比較繁瑣的權(quán)限的設(shè)置,反正我每次都是這么做的,一般不會有問題,見下:
chown -R root /usr/local/mysql chgrp -R mysql /usr/local/mysql chown -R root /usr/local/mysql/bin chgrp -R mysql /usr/local/mysql/bin chgrp -R mysql /var/lib/mysql chmod 777 /var/lib/mysql chown -R root /var/lib/mysql/mysql chgrp -R mysql /var/lib/mysql/mysql chmod 777 /var/lib/mysql/mysql chown -R root /var/lib/mysql/mysql/* chgrp -R mysql /var/lib/mysql/mysql/* chmod 777 /var/lib/mysql/mysql/* chmod 777 /usr/local/mysql/lib/mysql/libmysqlclient.a |
做完上面的步驟,然后把你編譯目錄的一個腳本COPY過去
cp support-files/mysql.server /etc/rc.d/init.d/mysqld chkconfig --add mysqld 用ntsysv設(shè)置使mysql每次啟動都能自動運行。
好了,至此mysql安裝完畢,你可以這樣起動你的mysql服務(wù)
/etc/rc.d/init.d/mysqld start
下面這步比較關(guān)鍵:
ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql ln -s /usr/local/mysql/include/mysql /usr/include/mysql 大家可以不做這步,大可以在編譯其他軟件的時候自定義myslq的庫文件路徑,但我還是喜歡把庫文件鏈接到默認(rèn)的位置,這樣你在編譯類似PHP,Vpopmail等軟件時可以不用指定mysql的庫文件地址。
2.安裝Apache1.3.29。
我沒有選擇安裝Apache2.0是我對他還是不放心,因為網(wǎng)上最新公布的apache的漏洞基本上是針對2.0,當(dāng)然大家可以自己選擇安裝相應(yīng)的版本。我這里講的都是采用DSO動態(tài)編譯的方法編譯Apache.
tar zvxf apache_1.3.29.tar.gz cd apache_1.3.29 修改src/include/httpd.h 增大最大線程數(shù) #define HARD_SERVER_LIMIT 256 改成 #define HARD_SERVER_LIMIT 2560 保存退出編譯apache ./configure --prefix=/usr/local/apache --enable-module=so --enable-module=rewrite --enable-shared=max --htdocsdir=/var/www && make && make install |
# 這里我們通過enable-module參數(shù)告訴設(shè)置腳本,我們需要啟動so和rewrite模塊,so模塊是用來提DSO支持的apache核心模塊,而rewrite模塊則是用意實現(xiàn)地址重寫的模塊,由于rewrite模塊需要DBM支持,如果在初次安裝時沒有編譯進(jìn)apache,以后需要用到時需要重新編譯整個apache才可以實現(xiàn)。為此除非你可以確定以后不會用到rewrite模塊,否則還是建議你在第一次編譯的時候把rewrite 模塊編譯好。
enable-shared=max
這個參數(shù)的作用時編譯apache時,把除了so以外的所有apache的標(biāo)準(zhǔn)模塊都編譯成DSO模塊。而不是編譯進(jìn)apache核心內(nèi)。
好了安裝apache很簡單的哦,啟動apache看看
/usr/local/apache/bin/apachectl start
然后用ie看[url]http://你的服務(wù)器地址。應(yīng)該能看到熟悉的apache羽毛標(biāo)志。[/url]
3.安裝PHP4.3.4 軟件獲取:[url]http://www.php.net/downloads.php[/url]
tar zvxf php-4.3.4.tar.gz cd php-4.3.4 ./configure \ --prefix=/usr/local/php \ --with-mysql=/usr/local/mysql \ --enable-force-cgi-redirect \ --with-freetype-dir=/usr \ --with-png-dir=/usr \ --with-gd --enable-gd-native-ttf \ --with-ttf \ --with-gdbm \ --with-gettext \ --with-iconv \ --with-jpeg-dir=/usr \ --with-png \ --with-zlib \ --with-xml \ --enable-calendar \ --with-apxs=/usr/local/apache/bin/apxs make make install |
# 我這里由于服務(wù)器需要用到GD庫,所以加了一些支持GD的編譯參數(shù),GD直接用了redhat自帶的GD庫,大家沒有安裝的話可以從安裝盤安裝,注意除了安裝GD以外,還要安裝libjpeg,libpng等庫文件。另外--with-mysql=/usr/local/mysql指向你安裝 mysql的路徑。--with-apxs指向apache的apxs文件的路徑。
vi /usr/local/apache/conf/httpd.conf 查找<IfModule mod_mime.c> 在此范圍添加 AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps 然CPOPY PHP的配置文件 cp ../php4.3.4/php.ini.dist /usr/local/php/lib/php.ini 修改php.ini文件 register_globals = On ok!重新啟動一下apache服務(wù)器 /usr/local/apache/bin/apachectl restart 然后寫個php測試頁info.php:內(nèi)容如下 <?php phpinfo(); ?> |
正常的話,應(yīng)該能看到php的信息了,恭喜你的Apche+Mysql+PHP安裝成功。 |
posted @
2006-01-26 20:22 nake 閱讀(541) |
評論 (0) |
編輯 收藏
Fedora中的中文字體是模糊的,總有種霧里看花的感覺,看久了眼鏡很不舒服。網(wǎng)上也有很多方法將字體改得清晰。基本上都是從windows中拷了
simsun字體后,再修改好幾個配置文件。往往會改得很郁悶,還一個不小心打錯幾個字母,字體就變?yōu)槟J(rèn)的很難看的仿宋體。
自己也郁悶了好久之后,網(wǎng)上看了一篇很強的方法,超級簡單,又很實用:
1:進(jìn)入下面的文件夾
[root@S01 ~]#cd /usr/share/fonts/chinese/TrueType
2:刪除:gkai00mp.ttf/gbsn00lp.ttf/bsmi00lp.ttf/bkai00mp.ttf四個字體文件
[root@S01 ~]#rm -rf gkai00mp.ttf gbsn00lp.ttf bkai00mp.ttf bsmi00lp.ttf
3:將simsun.ttc重命名為:gkai00mp.ttf和bkai00mp.ttf,并放到/usr/share/fonts/chinese/TrueTypa下
這樣重啟一下就OK了,怎么樣,簡單吧
simsun.ttc可以在windows中的%systemroot%windows/Fonts文件夾下拷貝。
在linux 中設(shè)置java的環(huán)境
vi /etc/profile.d/java.sh
這樣可以在所有的用戶中使用
在新的java.sh中輸入以下內(nèi)容:
#set java environment
JAVA_HOME=/usr/java/jdk1.5.0_06
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
posted @
2006-01-26 08:42 nake 閱讀(408) |
評論 (0) |
編輯 收藏
畢業(yè)后就沒用linux了,今晚裝了Fedora4
64位的.感覺一般.redhat5的時候我就稍微用過.不過安裝過程很快提示是15分鐘.我裝了4G的數(shù)據(jù).裝完后就啟動
eclipse3.1.0M6.死機(jī),重起,再啟動,還死機(jī). 郁悶!不過adsl很容易設(shè)置.啟動IM,不錯雖然和m s n
的樣子不一樣但是還是可以用.
posted @
2006-01-20 01:40 nake 閱讀(283) |
評論 (2) |
編輯 收藏