我必须模拟supermaket结帐。客户进来并结账。 actionlistener放在一个名为View的类中,我设置了一些参数,比如服务客户端的最大时间,最大模拟时间等.MainFrame类包含textarea和checkout和客户端的一些图形表示。
ok=new JButton("OK");
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int i;
int nr = 4;
Checkout c[] = new Checkout[ nr ];
for( i=0; i<nr; i++){
c[ i ] = new Checkout("Checkout "+Integer.toString( i ));
c[ i ].start();
}
Shop p = new Shop( nr , c, "Producer",30);
p.start();
}
});
public class Shop extends Thread {
private Checkout checout[];
private int nr_checkout;
static int id =0;
private int nr_clients;
MainFrame f = new MainFrame();
public Shop(int nr_checkout, Checkout checkout[], String name, int nr_clients) {
setName(name);
this.nr_checkout = nr_checkout;
this.checkout = new Checkout[nr_checkout];
this.nr_clients = nr_clients;
for(int i =0; i<nr_checkout;i++) {
this.checkout[i]=checkout[i];
}
}
private int min_index() {
int index = 0;
try {
long min = checkout[0].length_tail();
for(int i =1 ; i<nr_checkout;i++) {
long lung = checkout[i].length_tail();
if(lung<min) {
min = lung;
index = i;
}
}
}catch ( InterruptedException e ) {
System.out.println(e.toString());
}
return index;
}
public void run(){
try{
int i=0;
while( i<nr_clients ){
i++;
Client c = new Client(2,1,id++); //(serv time, waiting time,id)
int m = min_index();
f.display("\nClient :" +Long.toString( id )+" add to Checkout "+ Integer.toString(m));
checkout[m].add_client( c );
sleep( (int) (Math.random()*1000) );
}
}
catch( InterruptedException e ){
System.out.println( e.toString());
}
}
问题是,当我按下ok按钮时,它会打开5个MainFrames。
编辑:MainFrame类
public class MainFrame extends JFrame{
public JFrame mainFrame;
public JTextArea log;
public JLabel casa, coada, casa2, coada2 ;
public JPanel p1,p2;
public MainFrame(){
mainFrame = new JFrame("Simulator MultiThread");
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);;
mainFrame.setSize(700, 700);
mainFrame.setLayout(new GridLayout(1,2));
JPanel p1 = new JPanel();
p1.setLayout(new GridLayout(2,1));
casa = new JLabel("",JLabel.LEFT);
casa.setText("Checkout 1: ");
coada = new JLabel("",JLabel.LEFT);
coada.setText("Clients");
casa2 = new JLabel("",JLabel.LEFT);
casa2.setText("Checkout 2: ");
coada2 = new JLabel("",JLabel.LEFT);
coada2.setText("Clients: ");
p1.add(casa);
p1.add(coada);
p1.add(casa2);
p1.add(coada2);
log = new JTextArea(30, 30);
mainFrame.add(p1);
mainFrame.add(log);
mainFrame.setVisible(true);
}
public void display(String string) {
log.append(string);
}
}