代碼太長(zhǎng),怕吞了。。。
察哈爾右翼后ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
public class TestTimer extends JFrame implements ActionListener, Runnable {
private static TestTimer obj; // 自己的一個(gè)靜態(tài)實(shí)例,在這里沒什么特別的意思
private JButton btnStart; // 開始按鈕
private JButton btnPause; // 暫停按鈕
private JButton btnResume; // 恢復(fù)按鈕
private JButton btnStop; // 停止按鈕
private JLabel lblTime; // 顯示時(shí)間的Label(中文是標(biāo)簽?)
private static Thread th; // 一個(gè)用來控制時(shí)間的線程
private long count; // 計(jì)數(shù)
public TestTimer(){
super("秒表"); // TestTimer繼承JFrame,這里調(diào)用父類的構(gòu)造方法,傳入的參數(shù)表示窗口的標(biāo)題
btnStart = new JButton("開始"); // 初始化按鈕,傳入的參數(shù)表示按鈕上顯示的文字
btnPause = new JButton("暫停"); // 同上
btnResume = new JButton("繼續(xù)"); // 同上
btnStop = new JButton("停止"); // 同上
lblTime = new JLabel("00:00:00.000"); // 初始化Label,傳入的參數(shù)表示Label上顯示的文字
this.setLayout(new FlowLayout()); // 設(shè)置layout風(fēng)格為FlowLayout(就是設(shè)置控件的擺放方式)
this.add(btnStart); // 將控件加入到窗口中
this.add(btnPause); // 同上
this.add(btnResume); // 同上
this.add(btnStop); // 同上
this.add(lblTime); // 同上
btnStart.addActionListener(this); // 為按鈕添加監(jiān)聽器(為什么是this,因?yàn)門estTimer類實(shí)現(xiàn)了ActionListener接口,所以可以這樣用)
btnPause.addActionListener(this); // 為按鈕添加監(jiān)聽器(但我不建議這樣,這樣的話類的職責(zé)不明確)
btnResume.addActionListener(this); // 為按鈕添加監(jiān)聽器(當(dāng)然,如果只是實(shí)現(xiàn)需求,怕麻煩可以這么做)
btnStop.addActionListener(this); // 為按鈕添加監(jiān)聽器
this.setSize(150, 200); // 設(shè)置窗口大小
this.setVisible(true); // 顯示窗口
}
public static void main(String[] args) {
obj = new TestTimer(); // 主函數(shù)入口,初始化實(shí)例(其實(shí)就是啟動(dòng)窗口)
}
public void actionPerformed(ActionEvent e) {// 這里是實(shí)現(xiàn)ActionListener接口的地方
JButton btn = (JButton)e.getSource(); // 獲得是哪個(gè)按鈕觸發(fā)了事件
if(btn.getText().equals("開始")){ // 如果是開始按鈕
th = new Thread(obj); // 初始化一個(gè)線程(傳入obj是因?yàn)椋琓estTimer類實(shí)現(xiàn)了Runnable接口,同樣我不建議這樣做)
count = 0; // count計(jì)數(shù)器清零
th.start(); // 線程啟動(dòng)
}
else if(btn.getText().equals("暫停")){ // 如果是暫停按鈕
th.suspend(); // 線程掛起(這個(gè)方法已經(jīng)被新版本的JDK遺棄,你可以用,但不推薦用)
}
else if(btn.getText().equals("繼續(xù)")){ // 如果是繼續(xù)按鈕
th.resume(); // 線程恢復(fù)(同上)
}
else if(btn.getText().equals("停止")){ // 如果是停止按鈕
th.stop(); // 線程停止(同上)
}
}
@Override
public void run() { // 實(shí)現(xiàn)Runnable接口的地方
while(true){ // 無限循環(huán)(線程一直運(yùn)行著記錄時(shí)間)
int ms, seconds, minutes, hours; // 下面一整段都是根據(jù)count這個(gè)計(jì)數(shù)器來計(jì)算時(shí)間
// 你看到最后有一個(gè)Thread.sleep(1)表示該線程每毫秒工作一次,起到計(jì)數(shù)的作用)
String msg = ""; // msg表示Label上顯示的時(shí)間
hours = (int)(count / 3600000);
minutes = (int)((count - hours * 3600000) / 60000);
seconds = (int)((count - hours * 3600000 - minutes * 60000) / 1000);
ms = (int)(count % 1000);
if(hours 10){ // 下面這一串是用來做msg的格式
msg += "0" + hours + ":";
}
else{
msg += hours + ":";
}
if(minutes 10){
msg += "0" + minutes + ":";
}
else{
msg += minutes + ":";
}
if(seconds 10){
msg += "0" + seconds + ":";
}
else{
msg += seconds + ":";
}
if(ms 10){
msg += "00" + ms;
}
else if(ms 100){
msg += "0" + ms;
}
else{
msg += ms;
}
lblTime.setText(msg); // 顯示時(shí)間到Label上
count++; // 計(jì)數(shù)器遞增
try {
Thread.sleep(1); // 線程掛起1毫秒(也即,線程每毫秒執(zhí)行一次循環(huán))
}
catch (InterruptedException e) { // 異常處理(不必管,必須這樣寫)
e.printStackTrace();
}
}
}
}
學(xué)會(huì)在idea(eclipse)中閱讀、調(diào)試源碼,是java程序員必不可少的一項(xiàng)技能。
在idea中配完環(huán)境后,默認(rèn)其實(shí)也是能夠?qū)dk的源碼進(jìn)行debug調(diào)試的。但是無法在源碼中添加自己的注釋,無法添加自己的理解。如果干瞪眼看的話,可能過段時(shí)間,就忘記了。下面就介紹下,如何在jdk源碼中為所欲為,像在我們自己的代碼中一樣寫注釋、調(diào)代碼:
打開idea,選擇Project-File-Project Structure-SDKs-Sourcepath,初始狀態(tài)如下圖 :
打開本地jdk安裝路徑,本處為E:\java\jdk8,將此路徑下的src.zip壓縮包解壓到自定義的指定文件夾(可以在電腦磁盤任意位置),本處解壓到同目錄的jdk_source文件夾下,如下圖:
繼續(xù)在步驟1中的設(shè)置頁面中操作,將E:\java\jdk8\src.zip通過右側(cè)的減號(hào)將其移除;并通過右側(cè)的加號(hào),將解壓文件夾E:\java\jdk8\jdk_source導(dǎo)入進(jìn)來;點(diǎn)擊apply,再點(diǎn)擊OK。導(dǎo)入結(jié)果見下圖:
這時(shí),再重新打開jdk的源碼類,我們就可以在源java文件中,添加自己的注釋了。
一定注意:添加注釋時(shí),一定不要新加一行寫注釋。最好在一行代碼的后面,使用//進(jìn)行注釋。否則行號(hào)和真正的jre中編譯后的代碼行號(hào)對(duì)應(yīng)不上,如果對(duì)源碼debug時(shí),會(huì)出現(xiàn)代碼運(yùn)行和行號(hào)不匹配的情況
需要先下載html格式的jdk中文文檔,目前網(wǎng)上只能找到1.6版本的,準(zhǔn)備好資源后再進(jìn)行下一步設(shè)置,我使用的是IntelliJ IDEA,設(shè)置方法為:
File-Project Structure-SDKs
按圖片描述的步驟,配置下載的api文檔的路徑即可。
注:配置的路徑為文檔中index.html的路徑,否則不會(huì)生效,配置完成后在jdk中自帶的類上按Ctrl+Q就能看到中文的注釋。