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進制,可使用2,8,10,16不同參數(shù)???
System.out.println(ii);??
if(!checkDateEarlier(editForm.startTime.value,editForm.endTime.value,0))
??{
???alert("起始日期不能大于結(jié)束日期");
???return false;
??}
法則一:如果你創(chuàng)建了他,那么就要釋放他
在本章節(jié)的前一部分,你知道了創(chuàng)建SWT控件,相應的本地控件也被創(chuàng)建了。也就是說,調(diào)用了SWT的構造函數(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
但是,如果你沒有使用構造函數(shù)來申請資源,你就不能顯式的釋放他。比如,考慮下面的代碼:
Color color = display.getSystemColor(SWT.COLOR_RED); // Create a red Color
再一次,獲得了底層平臺的顏色資源,但是沒有分配他。法則一就說不能釋放他。為什么不呢?因為這個不屬于你-你只是借用了這個資源,其他的對象有可能正在使用它或者將要使用它。釋放這個資源會變得非常嚴重的。
法則二:釋放了父控件,子控件也被釋放
對每一個使用new創(chuàng)建的控件都使用dispose()會變得非常繁瑣,會使得SWT很快被拋棄。但是,SWT的設計者意識到了這一點,創(chuàng)建了一種邏輯上層疊的自動釋放機制。這意味著,當一個Shell被釋放了,所有與Shell有關的控件都被自動釋放了。你會發(fā)現(xiàn),永遠也不會使用label.dispose()在“Hello World”程序里,甚至你使用了new來創(chuàng)建一個Label對象。當用戶關閉了Shell,Label控件自動的釋放了。
也許你在想,你永遠不需要調(diào)用dispose(),這部分代碼只是在浪費空間。實際上,有可能寫一些程序,所有的資源都只有一個父類,并且這些資源都會自動釋放。但是,考慮一下下面的改變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)建時沒有父類,所以不會被自動釋放,甚至當Shell被關閉了,Text對象調(diào)用了dispose()。也許你會對使用font這個負擔而發(fā)怒,但是考慮到text沒有理由要對font負責-font不屬于他。實際上,你也許會使用這個Font對象在各種各樣的控件上,自動釋放會引發(fā)一系列的問題。
另外:
如果Java包裹的本地控件依然在活動,而他所屬于的Shell被釋放了,將發(fā)生什么情況呢?或者手動調(diào)用控件的dispose方法會怎么樣呢?本地控件會被釋放嗎?我們是否可以調(diào)用java對象而他的底層本地控件不存在?
答案當然是:可以!如果你調(diào)用一個對象而他的本地控件已經(jīng)釋放,會引出一些麻煩。一旦一個控件被釋放了,甚至他依然在活動,對他做什么都沒有用。是的,Java對象依然可用,但是底層的對應點已經(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();
? }
}
代碼可以編譯和運行,但是在關閉了主窗口后控制臺會打印出以下的錯誤:
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)
需要注意的,當你在Windows XP上運行這個程序,你會得到一個對話框顯示javaw.exe出現(xiàn)了問題,需要關閉,你是否愿意發(fā)送錯誤報告到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的服務里面啟動mysql服務可是總是彈出“錯誤 1067: 進程意外終止”!?
???????我感覺問題在配置文件,于是就重新寫了my.ini,啟動還是一樣的效果,我在google上查找無果,崩潰狀態(tài)!就在此時眼前一亮,一位高人的指點是我豁然開朗,你的ini文件有否放到windows目錄下,我從個人目錄的windows目錄下,將其拷貝到系統(tǒng)windows目錄下,啟動服務,ok!!!