JAVA學習筆記

1.java.lang.NumberFormatException:有兩種狀況錯誤,第一就是數據類型轉換錯誤。第二有空能 是沒有傳進參數,或者傳進空參數。例如案例,本人的解決方法。java

if(str1.equals("")||str1.equals("")){算法

//返回錯誤信息windows

}else{數組

traffic=Long.parseLong(str1.trim())+Long.parseLong(str2.trim());安全

}微信

2.abstract class 抽象類和接口的區別:抽象類是提取具體類的公因式,而接口是爲了將一些不相關的類「雜湊」成一個共同的羣體。至於他們在各個語言中的句法,語言細節並非我關心的重點。多線程

3.Timer實現的調度任務TimeTask要獨佔處理器,處理完該線程了,纔會處理下一個線程。因此要實現多線程的定時,要在單個線程裏面實現Time纔不會使該線程霸佔處理器。app

4.多線程並行運行的實現方式能夠繼承Runnable接口,在建立多線程把實例傳遞進去。線程的優先級高並不必定就先執行,只是先執行的機率高。eclipse

5.線程同步問題。用synchronized(syncObject) { //容許訪問控制的代碼 }ide

1.添加菜單欄是用jFRAME.setJMENUBar()方法。

5常見異常:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 沒有打包也會產生,或打包錯誤。

This method has a constructor name。該方法有同名構造函數,若是要改爲構造函數則去掉返回類型。

The serializable class XXX does not declare a static final serialVersionUID field of type long

可序列化的類 CreateBPOVIEW 未聲明類型爲 long 的靜態終態 serialVersionUID 字

serialVersionUID做用:

序列化時爲了保持版本的兼容性,即在版本升級時反序列化仍保持對象的惟一性。

6.DecimalForma格式化小數位幾位。DecimalFormat df = new DecimalFormat("#.00");

system.currentMills返回當前時間的毫秒數 new date 亦是返回毫秒數,須要除以1000方爲秒。

7.在出現異常的地方,就終止執行代碼,而後進入到catch,若是有多個catch則進入匹配的那個catch。finally有異常的話此塊總執行。throws是給調用者處理。

8.瞭解awt.swt.swing.jface之間的一些關係。JFrame.setDefultCloseOperation()默認關閉JAVAW。JButton按鈕

9.佈局管理器,Borderlayout.flowlayout.cardlayout.GridLayOut佈局面板JPanel

10.建立窗口基本過程 :1.定義組件 2.建立組件new 3.添加組件,設置佈局 4.設置窗體屬性 5顯示窗體

11.JText JLable JPassword ButtonGroup JRadioButton JCheckBox JcomboBox(Strign []) JList(Strign []) JList.setVisibleRowNum JScrollPanel (Jlist) 拆分組件 JSplitPanel ImageIcon ("路徑").getImage

TextArea 和TextField JTabbedPane 選項卡窗格。Lable.setFont Lable .setForeColor

JMenuBar  JMenu 菜單 樹幹  JMenuItem

JToolBar JButton

12.JAVA繪圖技術

pulbic void pain(Graphics g)

Graphics 畫筆類

畫直線       g.drawLine

畫矩形邊框     g.drawRect

畫橢圓邊框     g.drawOval

填充矩形      g.fillRect

填充橢圓

畫圖片       Image im =ToolKit.getdefaultToolKit().getImage

g.drawImage();

畫字符串      g.drawString

設置畫筆的字體

設置畫筆的顏色

13.super

1。表示調用父類的構造函數。也是一個特殊語法,不是變量,沒有什麼類型。

2。能夠在一個類的非static成員內部使用。好比super.method()。

3。super的另一個做用是調用父類的protected函數。只有經過"super"這個魔咒,咱們才能操做父類的protected成員,別無它法。

14.事件源 事件 事件監聽器對應實現  //注意,註冊監聽是在Jframe中的。

鍵盤事件:KeyEvent KeyListener

鼠標事件:MouseEven

鼠標監聽:MouseMotionEvent

窗口事件:WindowEvent

////別忘了,this.repain();!!!!

實現兩個按鍵同時響應的方法,設置一個Boolean變量,來存按鍵的響應。爾後經過變量來操做判斷。

14.ArrayList和Vector的區別是線程安全問題。vector是i線程安全的。

15.暈了,這個問題必定要注意了,這麼小的問題讓我排除了這麼久。isLive=true和isLive==true的區別一個是賦值,一個是判斷!!!!

16.Null pointer access: The variable point can only be null at this location

Point變量定義後必須初始化,不然會報此錯。

17.播放聲音類

public class PlayTest {

/** * @param args */ public static void main(String[] args) {

try {

AudioInputStream ais = AudioSystem.getAudioInputStream(new File("intel.wav"));// 得到音頻輸入流

AudioFormat baseFormat = ais.getFormat();// 指定聲音流中特定數據安排

System.out.println("baseFormat="+baseFormat);

DataLine.Info info = new DataLine.Info(SourceDataLine.class,baseFormat);

System.out.println("info="+info);

SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);

// 從混頻器得到源數據行

System.out.println("line="+line);

line.open(baseFormat);// 打開具備指定格式的行,這樣可以使行得到全部所需的系統資源並變得可操做。

line.start();// 容許數據行執行數據 I/O

int BUFFER_SIZE = 4000 * 4;

int intBytes = 0;

byte[] audioData = new byte[BUFFER_SIZE];

while (intBytes != -1) {

intBytes = ais.read(audioData, 0, BUFFER_SIZE);// 從音頻流讀取指定的最大數量的數據字節,並將其放入給定的字節數組中。

if (intBytes >= 0) { int outBytes = line.write(audioData, 0, intBytes);// 經過此源數據行將音頻數據寫入混頻器。

} }  } catch (Exception e) {  } } } }

18.jpanel中畫圖像的一種方法

p_w_picpathIcon = new ImageIcon("main.png"); //寫入文件路徑

p_w_picpathLabel = new JLabel(p_w_picpathIcon);     //初始化JLabel

jpanel = new JPanel();

this.add(BorderLayout.NORTH,jpanel);

this.setVisible(true); //設置爲顯示

19.關於GridBanLayOut佈局的理解,很複雜呀。

如今,提供本人對這些屬性的理解:

1,  gridx: 表示組件的左邊緣與網格左部之間的距離,若是學過HTML的話,那麼gridx就 至關於HTML 裏面的leftmargin屬性。

2,  gridy:  表示組件的上邊緣與網格頂部之間的距離,至關於HTML裏面的topmargin屬性!

3,  ipadx:  表示組件在默認的大小上,往水平方向上再加上多少像素的大小!

4,  ipady:  表示組件在默認的大小上,往垂直方向上再加上多少像素的大小!

5,   fill:  當組件沒有空間大時。它能夠肯定是否填充空間!

6,  anchor:  當組件沒有空間大時。它能夠肯定在顯示區域中放置組件的位置!

7, insets:  設置組件之間彼此的間距,它有四個參數,分別是上,左,下,右,

默認值爲(0,0,0,0)

8,weightx:  用來設置當窗口變大時,各組件沿水平方向跟着變大的比例,數字越大,表示組件能獲得的空間越大

9,weighty:  用來設置當窗口變大時,各組件沿垂直方向跟着變大的比例,數字越大,表示組件能得         到的空間越大

10,gridwidth  用來設置組件所佔的單位長度,默認值爲1。

11,gridheight 用來設置組件所佔的單位高度,默認值爲1。

對gridwidth與gridheight作了修改後,必須記得要對fill屬性作相應的修改,不然組件所顯示的大小   仍是原來的大小。

12,要單獨調整組件的大小,就要setLayOut(null);

記得設置首選大小,setPreferSize();,否則佈局時會顯示不出來。

13.設置Lable的字體能夠用<HTML  JLabel label = new JLabel("<HTML><U>這 是 下 劃 線</U></HTML>");>

14.關於引包的學習

把要引用的包放到以下目錄

C:\Program Files\Java\jre6\lib\ext

用import javax.mail(好比是這個包).*

若是有一下報錯的話:

報錯信息:Access restriction: The type TaskTopicResolver is not accessible due to restriction on required library NC_DEMO/NC_HOME/modules/uap/META-INF/lib/uapplatform.jar

解決方案1:

Eclipse 默認把這些受訪問限制的API設成了ERROR。

Windows -> Preferences -> Java -> Compiler -> Errors/Warnings ->

Deprecated and trstricted API -> Forbidden reference (access rules): -> change to warning

解決方案2:

只須要在project build path中先移除JRE System Library,再添加庫JRE System Library,從新編譯後就一切正常了。

解決方案3:

工程上右鍵->工程屬性->java builder path->Libraries標籤,點擊JRE System Library裏面的Access rules,add sun/** 爲accessible,若是該項存在,就edit。

解決方案4:

Windows -> Preferences -> Java -> Installed JREs -> 選擇用的JDK -> Edit -> Add External JARs

15.注意jtextfield和jpassword的取值問題

1.注意要監聽,監聽更改,插入,刪除

2.取值時密碼要用 string.valueof(jpasswordfield.getpassword())

jPasswordField.getDocument().addDocumentListener(new javax.swing.event.DocumentListener(){

public void changedUpdate(DocumentEvent e) {//這是更改操做的處理

qqPassWord= String.valueOf(jPasswordField.getPassword());

}

public void insertUpdate(DocumentEvent e) {//這是插入操做的處理

qqPassWord= String.valueOf(jPasswordField.getPassword());

}

public void removeUpdate(DocumentEvent e) {//這是刪除操做的處理

qqPassWord= String.valueOf(jPasswordField.getPassword());

}

}

);

16.鍵盤事件要注意的事件

1,有哪些組件能夠監聽,如jtextfield ,jpanel ,jframe ,jpassword 等等,是有能夠得到焦點的組件

2.注意只有得到焦點的組件在監聽,就是說在某個時刻只有一個組件能夠監聽

3.幾種方法實現,keylistener,keyadapter,.

17.關於座標系

getx()是取回該組件原點與父組件所對應的距離

getscreenx()是取回屏幕的x座標值。

18.導入插件類庫的方法

右鍵點擊項目 -> Build Path -> Config Build Path...

而後選擇Libraries標籤頁,點擊Add External JARs...

再到你的eclipse安裝目錄下的plugins目錄下尋找 org.eclipse.swt.win32.win32.x86_XXXXX.jar(XXXXX是版本號)。

2、安裝

一、將下載的swt-3.2-win32-win32-x86.zip解壓,其中會包含幾個文件有一個src.zip和swt.jar等獎swt.jar解壓縮後獲得如下文件,其中有4個dll文件, swt-awt-win32-3232.dll , swt-gdip-win32-3232.dll ,

swt-wgl-win32-3232.dll和swt-win32-3232.dll。

這四個文件就是SWT的原生庫文件。原生庫文件爲SWT 經過JNI 訪問windows 本地API 提供了接口,爲使Java 程序在啓動時可以訪問這些文件,能夠經過如下方法進行設置:

方法一:將這四個DLL文件複製到jre的bin目錄下。

方法二:設置環境變量,在PATH 中加入這幾個dll文件所在的目錄。

方法三:在eclipse的Java 項目中導入原生庫文件。操做方法是:

在eclipse 的包資源管理器中,右單擊項目名→導入→常規→文件系統→下一步→瀏覽

→選擇DLL文件所在目錄→肯定→勾選DLL文件→完成。

我用了方法三能夠。用方法一時出現異常,方法二沒試。

二、eclipse的Java項目中配置構建路徑,添加外部JAR,

將文件swt.jar 加入到項目中,操做方法是:

在eclipse的包資源管理器中,右單擊項目名→構建路徑→配置構建路徑→庫(L)→添

加外部JAR→在eclipse的plugins 文件夾中找到該jar 文件→打開→肯定。

19讀取GIF圖片要用p_w_picpath=new p_w_picpathicon().getp_w_picpath();而後放到pannel上,再用線程不斷repaint便可,呵呵。

20.設置窗口狀態位:

public void setExtendedState(int state)

21.queue是一個接口,要使用的話,能夠new linkedlist();來初始化。

22.查找電腦硬盤文件的代碼:

package com.qq.client;

import java.io.File;

import java.util.ArrayList;

import java.util.LinkedList;

import java.util.List;

import java.util.Queue;

/**

* 實現一個支持通配符的基於廣度優先算法的文件查找器

*/

public class FileFinder {

/**

* 查找文件。

* @param baseDirName    待查找的目錄

* @param targetFileName  目標文件名,支持通配符形式

* @param count        指望結果數目,若是畏0,則表示查找所有。

* @return    知足查詢條件的文件名列表

*/

public static List<File > findFiles(String baseDirName, String targetFileName, int count) {

/**

* 算法簡述:

* 從某個給定的需查找的文件夾出發,搜索該文件夾的全部子文件夾及文件,

* 若爲文件,則進行匹配,匹配成功則加入結果集,若爲子文件夾,則進隊列。

* 隊列不空,重複上述操做,隊列爲空,程序結束,返回結果。

*/

List<File> fileList = new ArrayList<File>();

//判斷目錄是否存在

File baseDir = new File(baseDirName);

if (!baseDir.exists() || !baseDir.isDirectory()){

System.out.println("文件查找失敗:" + baseDirName + "不是一個目錄!");

return fileList;

}

String tempName = null;

//建立一個隊列,Queue在第四章有定義

Queue<File> queue = new LinkedList<File>() ;//實例化隊列

queue.add(baseDir);//入隊

File tempFile = null;

while (!queue.isEmpty()) {

//從隊列中取目錄

tempFile = (File) queue.poll();

if (tempFile.exists() && tempFile.isDirectory()) {

File[] files = tempFile.listFiles();

for (int i = 0; i < files.length; i++) {

//若是是目錄則放進隊列

if (files[i].isDirectory()) {

queue.add(files[i]);

} else {

//若是是文件則根據文件名與目標文件名進行匹配

tempName = files[i].getName();

if (FileFinder.wildcardMatch(targetFileName, tempName)) {

//匹配成功,將文件名添加到結果集

fileList.add(files[i].getAbsoluteFile());

//若是已經達到指定的數目,則退出循環

if ((count != 0) && (fileList.size() >= count)) {

return fileList;

}

}

}

}

}

}

return fileList;

}

/**

* 通配符匹配

* @param pattern  通配符模式

* @param str  待匹配的字符串

* @return  匹配成功則返回true,不然返回false

*/

private static boolean wildcardMatch(String pattern, String str) {

int patternLength = pattern.length();

int strLength = str.length();

int strIndex = 0;

char ch;

for (int patternIndex = 0; patternIndex < patternLength; patternIndex++) {

ch = pattern.charAt(patternIndex);

if (ch == '*') {

//通配符星號*表示能夠匹配任意多個字符

while (strIndex < strLength) {

if (wildcardMatch(pattern.substring(patternIndex + 1),

str.substring(strIndex))) {

return true;

}

strIndex++;

}

} else if (ch == '?') {

//通配符問號?表示匹配任意一個字符

strIndex++;

if (strIndex > strLength) {

//表示str中已經沒有字符匹配?了。

return false;

}

} else {

if ((strIndex >= strLength) || (ch != str.charAt(strIndex))) {

return false;

}

strIndex++;

}

}

return (strIndex == strLength);

}

public static void main(String[] paramert) {

//  在此目錄中找文件

String baseDIR = "E:";

//  找擴展名爲txt的文件

String fileName = "QQ.*";

//  最多返回5個文件

int countNumber = 0;

List<File> resultList = FileFinder.findFiles(baseDIR, fileName, countNumber);

if (resultList.size() == 0) {

System.out.println("No File Fount.");

} else {

for (int i = 0; i < resultList.size(); i++) {

System.out.println(resultList.get(i));//顯示查找結果。

}

}

}

}

該方法居然沒考慮到空目錄的狀況,Source Not Find!!這個問題居然讓我找了一天才解決,暈倒啊!!!還有,Source Not Find!這個問題並不必定是找不到源文件,調試器總是提醒這個問題,不知怎麼搞的,個人居然不報空指針了,其實這是個空指針的問題,百度半天也沒解決,看來不少狀況都會報這個錯誤呀,必定要多多考慮可能發生問題的狀況,否則找死也找不出問題來!!

22.關於執行文件的問題

ce.exec( )函數的參數是一個字符串,這個函數把這個字符串當成一個命令行,而後執行這個命令行

ce.exec("javac dierge.java"); //執行javac dierge.java,編譯dierge.java文件按

ce.exec("java dierge"); //執行java dierge,執行這個java程序

File file1=new File("C:/windows","Notepad.exe"); //獲取相應目下的文件指針

ce.exec(file1.getAbsolutePath()); //getAbsolutePaht()函數返回file1的絕對路徑,包括文件名,而後exec執行這個絕對路徑

Desktop.getDesktop().open(resultList.get(i));這個是java虛擬機執行,會由於目錄問題而執行不了。

23.彈出對話框的幾種方式

1.顯示一個錯誤對話框,該對話框顯示的 message 爲 'alert':

JOptionPane.showMessageDialog(null, "alert", "alert", JOptionPane.ERROR_MESSAGE);

2.顯示一個內部信息對話框,其 message 爲 'information':

JOptionPane.showInternalMessageDialog(frame, "information","information", JOptionPane.INFORMATION_MESSAGE);

3.顯示一個信息面板,其 options 爲 "yes/no",message 爲 'choose one':

JOptionPane.showConfirmDialog(null, "choose one", "choose one", JOptionPane.YES_NO_OPTION);

4.顯示一個內部信息對話框,其 options 爲 "yes/no/cancel",message 爲 'please choose one',並具備 title 信息:

JOptionPane.showInternalConfirmDialog(frame,

"please choose one", "information",

JOptionPane.YES_NO_CANCEL_OPTION,

JOptionPane.INFORMATION_MESSAGE);

5.顯示一個警告對話框,其 options 爲 OK、CANCEL,title 爲 'Warning',message 爲 'Click OK to continue':

Object[] options = { "OK", "CANCEL" };

JOptionPane.showOptionDialog(null, "Click OK to continue", "Warning",

JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,

null, options, options[0]);

6.顯示一個要求用戶鍵入 String 的對話框:

String inputValue = JOptionPane.showInputDialog("Please input a value");

7.顯示一個要求用戶選擇 String 的對話框:

Object[] possibleValues = { "First", "Second", "Third" };

Object selectedValue = JOptionPane.showInputDialog(null, "Choose one", "Input",

JOptionPane.INFORMATION_MESSAGE, null,

possibleValues, possibleValues[0]);

100:切記!!!切記!!

組件變了屬性之後必定要重繪,並且用paitImmediately()進行當即重繪,才能夠顯示出想要的效果!!!!!

101.又學到了一招,若是不要影響界面的響應,若是有大量的計算要作的話,要另起一個線程去執行,注意線程之間必須是能夠獨立的,不要讓一個線程去等另一個線程的結果,極可能結果還沒計算出來,你就運行了要用的結果,會出現意外。

111。在eclipse中搜索時,搜索完以後有時候會彈出錯誤對話框,錯誤摘錄以下:

Resource is out of sync with the file system......

分析:

有時候由於時間緊迫的緣由,因此就沒去管它,今天再次遇到它,實在看着不爽,因此想了辦法解決此問題!

這個問題是因爲eclipse中文件不一樣步引發的。在eclipse中,工程文件是由eclipse自動掃描添加的,若是在外部修改了工程目錄中的文件但又關閉了自動刷新功能,則會引發文件不一樣步,從而搜索時出現Resource is out of sync with the file system問題(其它功能可能也會如此)。此外,在外部沒有修改eclipse工程中的文件也有可能引發該問題。

解決方法:

有兩種解決方法:

1)手動刷新。即在eclipse的工程目錄中,右鍵refresh(或者按下F5)。

2)配置eclipse的選項:

a)eclipse啓動時,刷新workspace,即勾選:window—>preferences—>general—>startup and shutdown—>refresh workspace on startup;

b)window—>preferences—>general—>workspace中:勾選選項:refresh using native hooks or polling和refresh on access;

112.打包jar要注意的問題,

1,注意生成MAINFEST-EF文件,主要是描述你的主函數在哪一個類

2,打包後,圖片不顯示的解決方法:

出現這種問題的緣由大可能是由於路徑的問題,每每是在項目中運行正常,可是一旦打包成Jar後就不能正常顯示了,下面總結一下解決此類問題的方法:

1、經過使用外部資源文件的方式解決

把項目打包生成Jar後,再新建一文件夾,把項目中全部使用的圖片文件和生成Jar文件放在該目錄下,只要代碼對圖片文件的引用路徑正確,如:ImageIcon p_w_picpath=new ImageIcon(SwingResourceManager.getImage("p_w_picpathfilePath"));就能夠了。

這種方式下,圖片文件與類文件不是一塊放在包中的,類文件在包中,而圖片文件在項目根目錄下。

2、經過使用內部資源文件的方式解決

把所用的圖片文件放在項目使用的包中,打包時把圖片文件同時打進Jar文件中。這種方式在具體代碼中應使用下面其中一種:

1.ImageIcon p_w_picpath = new ImageIcon(this.getClass().getResource("p_w_picpathfilePath"));

2.ImageIcon p_w_picpath = new ImageIcon(main.class.getResource("p_w_picpathfilePath"));

3.ImageIcon = SwingResourceManager.getImage(main.class,"p_w_picpathfilePath");

4.3.ImageIcon = SwingResourceManager.getImage(this.getClass(),"p_w_picpathfilePath");

3和4中第一個參數表明圖片文件路徑的參照對象,不能少,不然不能正確得到圖片資源。

最後,朋友們必定要注意大小寫的問題,在項目中文件名的大小寫沒有影響,可是打包後,就必須注意文件名大小寫問題了,不然也是不行的。

1.關於runtime

每一個 Java 應用程序都有一個 Runtime 類實例,使應用程序可以與其運行的環境相鏈接。能夠經過 getRuntime 方法獲取當前運行時。

應用程序不能建立本身的 Runtime 類實例。

1.bat運行QQ時出錯的問題://找不到圖片資源

在WIN7中要用管理員命令運行

在bat命令中要用當前路徑如:%~dp0/jre6/bin/javaw -jar QQ.jar

2.裏面用到的圖片和聲音文件,必定要用取基類路徑的方法去找,否則導出jar之後很容易找不到圖片和資源。

3.關於getclass.getresource()的取目錄問題

System.out.println(this.getClass().getResource(""));//返回當前類的包目錄下

System.out.println(this.getClass().getResource("."));

System.out.println(this.getClass().getResource(".."));

System.out.println(this.getClass().getResource("/"));//返回src同級目錄

4.取當前時間

Clander c=new grerogianclander();

c.get(int);具體看APi.

5.作qq時,最後BAT運行是,居然會有權限的問題,主要是軟件搜素了C盤,後面不搜索C盤問題就解決了。

更多資訊請點擊:華萬微信圖文

相關文章
相關標籤/搜索