Java 将JList线程与其他类中的线程同步
我在一个类中有一个JList,它正在排队和退队。还有一个类,从列表中获取并显示一个随机项。如何确保离开列表的项目是显示的项目?不尝试实现FIFO。我是个新手。提前谢谢 使用列表初始化:-Java 将JList线程与其他类中的线程同步,java,multithreading,swing,locking,jlist,Java,Multithreading,Swing,Locking,Jlist,我在一个类中有一个JList,它正在排队和退队。还有一个类,从列表中获取并显示一个随机项。如何确保离开列表的项目是显示的项目?不尝试实现FIFO。我是个新手。提前谢谢 使用列表初始化:- import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.DefaultListModel; import javax.swing.JList; /** *
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListModel;
import javax.swing.JList;
/**
*
* @author skb
*/
public class Queue extends Thread{
int size,capacity;
PriorityQueue<Customer> queue;
JList display;
Thread t;
DefaultListModel dlm;
public Queue(int capacity,JList qi){
this.queue = new PriorityQueue<Customer>();
this.capacity=capacity;
this.size=0;
this.display=qi;
this.dlm=new DefaultListModel();
}
public boolean queue (Customer cus){
if(size<capacity){
queue.add(cus);
size++;
dlm.addElement(cus.toString());
display.setModel(dlm);
return true;
}else{
return false;
}
}
public boolean isEmpty(){
return queue.isEmpty();
}
public Customer dequeue(){
if(!dlm.isEmpty()){
dlm.remove(0);
display.setModel(dlm);
return this.queue.remove();
}else{
return null;
}
}
private ArrayList loadData(){
ArrayList<Customer> data=new ArrayList<>();
Loader loader=new Loader();
String[] customers=loader.readFile("customers.txt");
for(int i=0;i<customers.length;i++){
String[] temp=customers[i].split(":");
data.add(new Customer(temp[0],temp[1],temp[2]));
}
return data;
}
@Override
public void run(){
ArrayList<Customer> data=loadData();
for (int i=0;i<data.size();i++){
queue(data.get(i));
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(Queue.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
@Override
public void start(){
if(t==null){
t=new Thread(this,"customers queue");
t.start();
}
}
}
若要更快获得更好的帮助,请添加or。若要更快获得更好的帮助,请添加or。
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JTextArea;
/**
*
* @author skb
*/
public class Desk extends Thread{
private String desk;
private JTextArea display;
Thread t;
public Desk(String desk,JTextArea disp) {
this.desk = desk;
this.display=disp;
}
public String getDesk() {
return desk;
}
public void processCustomer(Customer cus){
int price=0;
StringBuilder sb=new StringBuilder();
sb.append("\t\t"+desk+"\n");
sb.append(cus.getName()+" is dropping off 1 bag of "+ cus.getLuggage()+"kg.");
if(cus.getLuggage()>20){
price=35;
sb.append("\nA Baggage fee of "+price+" is due");
}
display.setText(sb.toString());
}
@Override
public void run(){
boolean status = Airport.customerQueue.isEmpty();
while (true) {
Customer customer = Airport.customerQueue.dequeue();
if (customer != null) {
processCustomer(customer);
Airport.board(customer);
}
try {
Thread.sleep(15000);
} catch (InterruptedException ex) {
Logger.getLogger(Desk.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
@Override
public void start(){
if(t==null){
t=new Thread(this,desk);
t.start();
}
}
}