2006年8月20日
int?? i=8;???? //測試數(shù)據(jù)??
String?? s?? =?? String.valueOf(Integer.toBinaryString(i));???? //int?? to?? binary??
System.out.println(s);???
?????????
String?? ss?? =?? "11";???
int?? ii?? =?? Integer.parseInt(ss,2);??
//binary?? to?? int,parseInt中2代表2進(jìn)制,可使用2,8,10,16不同參數(shù)???
System.out.println(ii);??
if(!checkDateEarlier(editForm.startTime.value,editForm.endTime.value,0))
??{
???alert("起始日期不能大于結(jié)束日期");
???return false;
??}
配置oracle10g(要下載ojdbc14包--是jdbc for oracle10g)
連接池(c3p0)的包的下載地址:
http://sourceforge.net/projects/c3p0
上下文路徑的xml文件內(nèi)容如下:
<Context path="/test" reloadable="true" docBase="E:\project\test" workDir="E:\project\test\work" >
<Resource auth="Container" description="DB Connection" driverClass="oracle.jdbc.driver.OracleDriver"
?maxPoolSize="10" minPoolSize="1" acquireIncrement="1" name="jdbc/oracle10g" user="test" password="test"
?factory="org.apache.naming.factory.BeanFactory" type="com.mchange.v2.c3p0.ComboPooledDataSource"
?jdbcUrl="jdbc:oracle:thin:@192.168.1.86:1521:orcl" />
</Context>?
注意:tomcat5.0和tomcat5.5系列的差別:
參數(shù)都相同;只是xml的格式不一樣;
5.0是分開寫;5.5是寫在一個里.
法則一:如果你創(chuàng)建了他,那么就要釋放他
在本章節(jié)的前一部分,你知道了創(chuàng)建SWT控件,相應(yīng)的本地控件也被創(chuàng)建了。也就是說,調(diào)用了SWT的構(gòu)造函數(shù),底層的本地資源也被創(chuàng)建了。所以如果你寫下如下代碼,那么你就創(chuàng)建了一個SWT顏色對象,那么也就在系統(tǒng)的底層資源里分配了一個顏色資源:
Color color = new Color(display, 255, 0, 0); // Create a red Color
法則一說明了如果你創(chuàng)建了他,那么你就要在使用完時釋放他,像下面一樣:
color.dispose(); // I create it, so I dispose it
但是,如果你沒有使用構(gòu)造函數(shù)來申請資源,你就不能顯式的釋放他。比如,考慮下面的代碼:
Color color = display.getSystemColor(SWT.COLOR_RED); // Create a red Color
再一次,獲得了底層平臺的顏色資源,但是沒有分配他。法則一就說不能釋放他。為什么不呢?因?yàn)檫@個不屬于你-你只是借用了這個資源,其他的對象有可能正在使用它或者將要使用它。釋放這個資源會變得非常嚴(yán)重的。
法則二:釋放了父控件,子控件也被釋放
對每一個使用new創(chuàng)建的控件都使用dispose()會變得非常繁瑣,會使得SWT很快被拋棄。但是,SWT的設(shè)計(jì)者意識到了這一點(diǎn),創(chuàng)建了一種邏輯上層疊的自動釋放機(jī)制。這意味著,當(dāng)一個Shell被釋放了,所有與Shell有關(guān)的控件都被自動釋放了。你會發(fā)現(xiàn),永遠(yuǎn)也不會使用label.dispose()在“Hello World”程序里,甚至你使用了new來創(chuàng)建一個Label對象。當(dāng)用戶關(guān)閉了Shell,Label控件自動的釋放了。
也許你在想,你永遠(yuǎn)不需要調(diào)用dispose(),這部分代碼只是在浪費(fèi)空間。實(shí)際上,有可能寫一些程序,所有的資源都只有一個父類,并且這些資源都會自動釋放。但是,考慮一下下面的改變Text中字體的代碼。如下:
Text text = new Text(shell, SWT.BORDER); //Create the text field
Font font = new Font(display, ”Arial”, 4, SWT.BOLD); //Create the new font
text.setFont(font); //Set the font into the text field
這個字體對象創(chuàng)建時沒有父類,所以不會被自動釋放,甚至當(dāng)Shell被關(guān)閉了,Text對象調(diào)用了dispose()。也許你會對使用font這個負(fù)擔(dān)而發(fā)怒,但是考慮到text沒有理由要對font負(fù)責(zé)-font不屬于他。實(shí)際上,你也許會使用這個Font對象在各種各樣的控件上,自動釋放會引發(fā)一系列的問題。
另外:
如果Java包裹的本地控件依然在活動,而他所屬于的Shell被釋放了,將發(fā)生什么情況呢?或者手動調(diào)用控件的dispose方法會怎么樣呢?本地控件會被釋放嗎?我們是否可以調(diào)用java對象而他的底層本地控件不存在?
答案當(dāng)然是:可以!如果你調(diào)用一個對象而他的本地控件已經(jīng)釋放,會引出一些麻煩。一旦一個控件被釋放了,甚至他依然在活動,對他做什么都沒有用。是的,Java對象依然可用,但是底層的對應(yīng)點(diǎn)已經(jīng)釋放了。那么就會得到一個SWTException,顯示為“Widget has been disposed”??紤]Listing 3-2的代碼。
Listing 3-2:Broken.java
CODE:
import org.eclipse.swt.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
public class Broken
{
public static void main(String[] args)
{
? Display display = new Display();
? Shell shell = new Shell(display);
? shell.setLayout(new RowLayout());
? Text text = new Text(shell, SWT.BORDER);
? shell.open();
? while (!shell.isDisposed())
? {
? if (!display.readAndDispatch())
? {
? ? display.sleep();
? }
? }
? System.out.println(text.getText()); // PROBLEM!
? display.dispose();
? }
}
代碼可以編譯和運(yùn)行,但是在關(guān)閉了主窗口后控制臺會打印出以下的錯誤:
Org.eclipse.swt.SWTException: Widget is disposed
at org.eclipse.swt.SWT.error(SWT.java:2332)
at org.eclipse.swt.SWT.error(SWT.java:2262)
at org.eclipse.swt.widgets.Widget.error(Widget.java:385)
at org.eclipse.swt.widgets.Control.getDisplay(Control.java:735)
at org.eclipse.swt.widgets.Widget.isValidThread(Widget.java:593)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:315)
at org.eclipse.swt.widgets.Text.getText(Text.java:705)
at Broken.main(Verison.java:24)
需要注意的,當(dāng)你在Windows XP上運(yùn)行這個程序,你會得到一個對話框顯示javaw.exe出現(xiàn)了問題,需要關(guān)閉,你是否愿意發(fā)送錯誤報(bào)告到Microsoft?
? /*讀*/
? SAXBuilder builder = new SAXBuilder();
? Document doc = null;
??try {
????? doc = builder.build("config.xml");
??} catch (Exception e) {
????? e.printStackTrace();
????? return;
??}
??//獲得這個文檔的根元素
??Element printer = doc.getRootElement();
??Element name = printer.getChild("name");
??this.name = name.getText();
? /*寫*/
? SAXBuilder builder = new SAXBuilder();
??Document doc;
??try {
???? ?doc = builder.build("config.xml");
??} catch (Exception e) {
??????? return;
??}
??Element printer = doc.getRootElement();
??Element name = printer.getChild("name");
??name.setText( PrintParameter.getInstance().getName() );
????????
??XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat().setEncoding("utf-8"));
?try {
???? ?outputter.output(doc, new java.io.FileOutputStream("config.xml"));
??} catch (Exception e) {
??}
? /*讀*/?
? Properties settings = new Properties();
??String name = "printConfig";
??try {
????? FileInputStream in = new FileInputStream(name + ".properties");?
????? settings.load(in);
????? String value = Integer.parseInt( (String) settings.get("name") ;
??} catch (IOException e) {e.printStackTrace();}
? /*寫*/
? Properties settings = new Properties();
? String name = "printConfig";
??FileOutputStream out = null;
??try {
????? out = new FileOutputStream( name + ".properties" );
????? settings.store(out,"");
??} catch (Exception e1) {
????? e1.printStackTrace();
??}
??????在windows2000的服務(wù)里面啟動mysql服務(wù)可是總是彈出“錯誤 1067: 進(jìn)程意外終止”!?
???????我感覺問題在配置文件,于是就重新寫了my.ini,啟動還是一樣的效果,我在google上查找無果,崩潰狀態(tài)!就在此時眼前一亮,一位高人的指點(diǎn)是我豁然開朗,你的ini文件有否放到windows目錄下,我從個人目錄的windows目錄下,將其拷貝到系統(tǒng)windows目錄下,啟動服務(wù),ok!!!
將Mysql添加到Windows系統(tǒng)服務(wù)中:
1.、 安裝服務(wù)。
在Windows2000下,安裝完成后,并沒有把MySQL安裝成服務(wù),我們必須執(zhí)
行下面的語句把MySQL注冊為服務(wù):installdir\\mysql\\bin\\mysqld-nt –
-install。
Windows98下沒有服務(wù)的概念,所以不用安裝服務(wù)。
2.、 啟動服務(wù)
在Windows2000下,安裝服務(wù)后可以啟動MySQL服務(wù):net start mysql。
在Windows98下,可以用下面的命令啟動服務(wù):c:\\mysql\\bin\\mysqld,服
務(wù)啟動后在后臺運(yùn)行,并沒有界面。
3.、 停止服務(wù)
在Windows2000下,可以通過下面的命令停止MySQL服務(wù):net stop mysql
。
在Windows98下,可以通過下面命令停止服務(wù):C:\\>
C:\\mysql\\bin\\mysqladmin -u root shutdown
4、 卸載服務(wù)
可以通過下面的命令卸載MySQL服務(wù):installdir\\mysql\\bin\\mysqld-nt
–-remove。