PDA

View Full Version : مشکل در ایجاد تاخیر در حلقه



qqbangbang
سه شنبه 20 آذر 1386, 11:59 صبح
با سلام خدمت دوستان گرامی.
برنامه ی زیر که مشاهده می کنید, محیط شبیه سازی یک بانک به زبان جاواست.
با زدن دکمه ی شروع زمان شروع شده و تا 120 ثانیه خواهد رفت.
در هر ثانیه یک مشتری وارد صفی که تعداد کمتری دارد می شود.
زمان پاسخگوئی به مشتری A , B, C به ترتیب 40و70و60 می باشد.
مشکل من اینست که با زدن شروع فقط یکبار حلقه اجرا می شود.
در صورتی که برنامه باید تا آخر 120 ثانیه ادامه پیدا کند.
لطف کنید برنامه را بررسی کنید و مشکل من را بفرمائید.

/*
* BankSimulatorUI.java
*
* Created on November 25, 2007, 6:58 AM
*/

package my.BankSimulator;

import java.awt.event.ActionListener;
import java.io.EOFException;
import javax.management.timer.Timer;




/**
*
* @author admin
*/
public class BankSimulatorUI extends javax.swing.JFrame {
int SimClock=0,TotalServiced1=0,TotalServiced2=0,Total Serviced3=0,
SumCustomerCAinA1=0,SumCustomerCBinA1=0,SumCustome rCCinA1=0,
EnterTime1, EnterTime2, EnterTime3,
SumDalayCAinA1=0,
SumCustomerCAinA2=0,SumDalayCAinA2=0,SumCustomerCB inA2=0,
SumDalayCBinA2=0,SumCustomerCCinA2=0,SumDalayCCinA 2=0,SumDalayCBinA1=0,
SumCustomerCBinA3=0,SumDalayCAinA3=0,
SumCustomerCAinA3=0,SumDalayCBinA3=0,SumCustomerCC inA3=0,SumDalayCCinA1=0,
SumDalayCCinA3=0;
Boolean ForbidenA1=false,ForbidenA2=false,interrupted=fals e;
int delay = 1000; //milliseconds



/** Creates new form BankSimulatorUI */
public BankSimulatorUI() {

initComponents();
}



/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">
private void initComponents() {

jPanel1 = new javax.swing.JPanel();
jLabel7 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jTextField2 = new javax.swing.JTextField();
jPanel2 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jPanel3 = new javax.swing.JPanel();
list1 = new java.awt.List();
list2 = new java.awt.List();
list3 = new java.awt.List();
list4 = new java.awt.List();
list5 = new java.awt.List();
list6 = new java.awt.List();
list7 = new java.awt.List();
list8 = new java.awt.List();
list9 = new java.awt.List();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jLabel9 = new javax.swing.JLabel();
jLabel12 = new javax.swing.JLabel();
jLabel10 = new javax.swing.JLabel();
jLabel13 = new javax.swing.JLabel();
jLabel14 = new javax.swing.JLabel();
jLabel15 = new javax.swing.JLabel();
jPanel4 = new javax.swing.JPanel();
jLabel8 = new javax.swing.JLabel();
jTextField6 = new javax.swing.JTextField();
jLabel11 = new javax.swing.JLabel();
jTextField3 = new javax.swing.JTextField();
jTextField7 = new javax.swing.JTextField();
jTextField4 = new javax.swing.JTextField();
jTextField8 = new javax.swing.JTextField();
jTextField5 = new javax.swing.JTextField();

setDefaultCloseOperation(javax.swing.WindowConstan ts.EXIT_ON_CLOSE);

jLabel7.setText("Timer:");
jButton1.setText("\u0634\u0631\u0648\u0639");
jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jButton1MouseClicked(evt);
}
});
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});


.addContainerGap() pack();
}// </editor-fold>



public void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
int TCA3,TCA2,TCA1,sertimeBinA3,x,ServiceTime1,Service Time2,ServiceTime3,
MinQueue,MinQueueCount ,stca,BulletinState,sertime;
String Ctype="0";

sertime=0;TCA1=0;TCA2=0;TCA3=0;



while (SimClock<1200){


try{ Thread.sleep( 1000 );} catch( InterruptedException interruptedException ) {};


SimClock=SimClock+10;

jTextField1.setText(String.valueOf(SimClock));





//'''''''''''''''''''''Delete From Queues''''''''''''''''''''''''''''''''''



if (list1.getItemCount() > 0) {


ServiceTime1=Integer.valueOf(list2.getItem(sertime ));


ServiceTime1=ServiceTime1-10;


list2.replaceItem(String.valueOf(ServiceTime1),0);

if (ServiceTime1 == 0){

Ctype=list1.getItem(0);
if (Ctype == "ca")
{
SumCustomerCAinA1= (Integer.valueOf(SumCustomerCAinA1))+1;
}
else if (Ctype == "cb")
{
SumCustomerCBinA1= (Integer.valueOf(SumCustomerCBinA1))+1;
}
else
{
Ctype = "cc";
SumCustomerCCinA1= (Integer.valueOf(SumCustomerCCinA1))+1;
}
TotalServiced1=TotalServiced1+1;
jTextField3.setText(String.valueOf(TotalServiced1) );
list1.select(0) ;
list2.select(0) ;
list3.select(0) ;

list1.remove(getState());
list2.remove(getState());
list3.remove(getState());




}

}


if (list4.getItemCount() > 0) {


ServiceTime2=Integer.valueOf(list5.getItem(sertime ));

ServiceTime2=ServiceTime2-10;


list5.replaceItem(String.valueOf(ServiceTime2),0);

if (ServiceTime2 == 0){

Ctype=list4.getItem(0);
if (Ctype == "ca")
{
SumCustomerCAinA2= (Integer.valueOf(SumCustomerCAinA2))+1;
}
else if (Ctype == "cb")
{
SumCustomerCBinA2= (Integer.valueOf(SumCustomerCBinA2))+1;
}
else
{
Ctype = "cc";
SumCustomerCCinA2= (Integer.valueOf(SumCustomerCCinA2))+1;

}
TotalServiced2=TotalServiced2+1;
jTextField4.setText(String.valueOf(TotalServiced2) );
list4.select(0) ;
list5.select(0) ;
list6.select(0) ;

list4.remove(getState());
list5.remove(getState());
list6.remove(getState());




}

}

if (list7.getItemCount() > 0) {


ServiceTime3=Integer.valueOf(list8.getItem(sertime ));

ServiceTime3=ServiceTime3-10;


list8.replaceItem(String.valueOf(ServiceTime3),0);

if (ServiceTime3 == 0){

Ctype=list7.getItem(0);
if (Ctype == "ca")
{
SumCustomerCAinA3= (Integer.valueOf(SumCustomerCAinA3))+1;
}
else if (Ctype == "cb")
{
SumCustomerCBinA3= (Integer.valueOf(SumCustomerCBinA3))+1;
}
else
{
Ctype = "cc";
SumCustomerCCinA3= (Integer.valueOf(SumCustomerCCinA3))+1;
}
TotalServiced3=TotalServiced3+1;
jTextField5.setText(String.valueOf(TotalServiced3) );
list7.select(0) ;
list8.select(0) ;
list9.select(0) ;

list7.remove(getState());
list8.remove(getState());
list9.remove(getState());




}

}

//'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''
//=====================Insert In Queues =====================

if (Math.random()<=0.4) {
Ctype="ca";
sertime=60;
}
else if ((Math.random()<=0.7) && (Math.random()>0.4)) {
Ctype="cc";
sertime=40;
}
else {
Ctype="cb";
sertime=70;
}
//-----Find MinQueue-------
MinQueue=1;
if (list4.getItemCount()<list1.getItemCount())
MinQueue=2;
//####### Customer Type B Limitation ######
if (Ctype=="cb"){
if ((list7.getItemCount()<list1.getItemCount()) && (list7.getItemCount()<list4.getItemCount()))
MinQueue=3;
else if ((ForbidenA1 == true) && (ForbidenA2 == true) )
MinQueue=3;
else if (ForbidenA1== true){

MinQueue=2;
if (list7.getItemCount() < list4.getItemCount())
MinQueue=3;
}
else if (ForbidenA2 == true) {
MinQueue=1;
if (list7.getItemCount() < list1.getItemCount())
MinQueue=3;


}
}//Find MinQueue
//#########################################
//------Inseting in Queue-------------------

if (MinQueue == 1) {

list1.addItem(Ctype);
list2.addItem(String.valueOf(sertime));
list3.addItem(String.valueOf(SimClock));
TCA1=list1.getItemCount();
jTextField6.setText(String.valueOf(TCA1));


}
else if (MinQueue == 2) {

list4.addItem(Ctype);
list5.addItem(String.valueOf(sertime));
list6.addItem(String.valueOf(SimClock));
TCA2=list4.getItemCount();
jTextField7.setText(String.valueOf(TCA2));


}
else if (MinQueue == 3) {

list7.addItem(Ctype);
list8.addItem(String.valueOf(sertime));
list9.addItem(String.valueOf(SimClock));
TCA3=list7.getItemCount();
jTextField8.setText(String.valueOf(TCA3));


}


//============= Board Messeges ==========

if ((list1.getItemCount() < 4) && (list4.getItemCount() < 4))
BulletinState=1;
jTextField2.setText("WelCome.The Bank is working");
if (list1.getItemCount() > 4) {

ForbidenA1=true;
BulletinState=2;
jTextField2.setText("Customer Type CB Dont Have Access to standing in queue A1");
}

else{
ForbidenA1=false;
}
if (list4.getItemCount() > 4) {

ForbidenA2=true;
BulletinState=3;
jTextField2.setText("Customer Type CB Dont Have Accessto standing in queue A2");
}
else{
ForbidenA2=false;
}
if ((ForbidenA1 == true) && (ForbidenA2 == true)) {
BulletinState=4;
jTextField2.setText("Customer Type CB Dont Have Access to standing in queues A1 & A2");

}


// ------------------------------------------------------------------------------------

}

}



private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
} // TODO add your handling code here:
/*



/*


/**
* @param args the command line arguments
*/
public static void main(String args[]) {



java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new BankSimulatorUI().setVisible(true);

}
});
}

// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel12;
private javax.swing.JLabel jLabel13;
private javax.swing.JLabel jLabel14;
private javax.swing.JLabel jLabel15;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
private javax.swing.JTextField jTextField4;
private javax.swing.JTextField jTextField5;
private javax.swing.JTextField jTextField6;
private javax.swing.JTextField jTextField7;
private javax.swing.JTextField jTextField8;
private java.awt.List list1;
private java.awt.List list2;
private java.awt.List list3;
private java.awt.List list4;
private java.awt.List list5;
private java.awt.List list6;
private java.awt.List list7;
private java.awt.List list8;
private java.awt.List list9;
// End of variables declaration

}

rezaTavak
چهارشنبه 21 آذر 1386, 09:21 صبح
اگر در یک IDE اینکار را انجام می دهید با Debug باید مشکل را پیدا کنید این همه خط برنامه با دست کار سختی است.

mmnmmn
شنبه 24 آذر 1386, 11:29 صبح
سلام!
کدتو سریع نگاه کردم و نکاتی به نظرم رسید که بگم.
1- اینکه فکر کنم حلقه while که منظورت بوده چند بار تکرار می شه ولی احتمالا سریع برنامه شما تموم می شه و شما فکر می کنید که یک بار اجرا شده اگه اینطور نیست شاید برنامه با یک خطا پایان می پذیرد که شما توجه نکردید.
2- شما برای تاخیر از sleep استفاده کردید که با یک ساختار "سعی و گیر" آن را کنترل می کنید ولی هیچ عباراتی در قسمت گرفتن استثنا ننوشته اید و این ممکن است باعث شود شما نفهمید که این قسمت از کد اصلا اجرا نمی شود و تاخیری در برنامه ایجاد نمی شود.
پیشنهاد دوستمان که در یک ویرایش گر آن را قدم قدم اجرا کن نیز فکر خوبی است که من پیشنهاد می کنم دو قسمت را بررسی کن یکی موقعی که به خط sleep می رسی و دوم نیز خط شرط حلقه است و یا خط بعد از حلقه که با چه مقادیر متغیری به این خطها می رسد
یا علی.

Mohammad_Has
دوشنبه 03 دی 1386, 07:48 صبح
چه گونه می توان با Javascript نقشه ی هر صفحه را در بالای هر صفحه قرار داد؟
با تشکر