[問(wèn)答題] 綜合應(yīng)用題下面是一個(gè)Applet程序,其功能是實(shí)現(xiàn)一個(gè)計(jì)數(shù)器,每隔0.15秒計(jì)數(shù)器數(shù)值加1,數(shù)值動(dòng)態(tài)變化,并且能夠控制計(jì)數(shù)器的暫停和繼續(xù)。要求通過(guò)使
[問(wèn)答題] 綜合應(yīng)用題下面是一個(gè)Applet程序,其功能是實(shí)現(xiàn)一個(gè)計(jì)數(shù)器,每隔0.15秒計(jì)數(shù)器數(shù)值加1,數(shù)值動(dòng)態(tài)變化,并且能夠控制計(jì)數(shù)器的暫停和繼續(xù)。要求通過(guò)使用swing的構(gòu)件建立圖形用戶界面,主要包括一個(gè)文本區(qū)域,用于顯示計(jì)數(shù)器結(jié)果;兩個(gè)按鈕,一個(gè)使計(jì)數(shù)器暫停,一個(gè)使計(jì)數(shù)器繼續(xù)工作。請(qǐng)改正程序中的錯(cuò)誤(有下劃線的語(yǔ)句),使程序能輸出正確的結(jié)果。注意:不改動(dòng)程序的結(jié)構(gòu),不得增行或刪行。程序運(yùn)行結(jié)果如下:import javax.swing.*;import java.awt.*; import java.awt.event.*;/**/public class ex7_3 extends JApplet { private JTextField jtf = new JTextField(15); private JButton Hold = new JButton("Hold"),resume = new JButton("Resume"); private ex7_3th obj7_3th = new ex7_3th(); class ex7_3th extends Thread {private int cnt = 0;private boolean bIsHold = false;public ex7_3th() { start(); }public void hold() { bIsHold = true; }public synchronized void fauxResume() { bIsHold = false; wait();}public void run() { while (true) {try { sleep(150); synchronized(this) {while(bIsHold) notify(); }} catch(InterruptedException ie) { System.err.println("Interrupted");}jtf.setText(cn
正確答案:notify()wait()jtf.setText.(Integer.toString(cnt++))
參考解析:本題主要考查圖形用戶界面,swing以及線程同步、共享、死鎖相結(jié)合的綜合應(yīng)用。解題關(guān)鍵是熟悉wait()方法和notify()方法的含義,wait()必須被聲明為synchronized,這樣它才能擁有對(duì)象鎖。fauxResume()把bIsHold標(biāo)志設(shè)為false,并調(diào)用notify(),為了喚醒synchronized子句中的wait(),所以notify()也必須被聲明為synchronized,這樣才能在調(diào)用notify()之前獲得對(duì)象鎖(然后該對(duì)象鎖才能在wait()執(zhí)行時(shí)被運(yùn)用)。本題中,第一和第二處,應(yīng)該在bIsHold為true時(shí)調(diào)用wait(),而在fauxResume()中調(diào)用notify();第三處,需要對(duì)int類型作轉(zhuǎn)換才能夠作為String類型輸出,并且要對(duì)計(jì)數(shù)器變量cnt做累加。
詞條內(nèi)容僅供參考,如果您需要解決具體問(wèn)題
(尤其在法律、醫(yī)學(xué)等領(lǐng)域),建議您咨詢相關(guān)領(lǐng)域?qū)I(yè)人士。