/*
* ElevatorController.java
*
* Created on 2005年12月28日, 下午 10:08
*
*/
package marsping.component;
import marsping.component.data.CallList;
import marsping.component.type.Direction;
import marsping.component.type.Floor;
import java.util.ArrayList;
import marsping.CurrentFloorPanel;
import marsping.ListPanel;
/**
*
* @author MarsPing
*/
public class ElevatorController implements Runnable{
private static boolean moving = false;
private static boolean powerOn = false;
private static boolean doorOpen = false;
private static CallList upCallList = new CallList();
private static CallList downCallList = new CallList();
private OperationPanel opPanel;
private CurrentFloorPanel cfPanel;
private ListPanel lPanel;
private ArrayList<CallPanel> cpList;
private Elevator elevator = new Elevator(Floor.F1);
private long time = System.currentTimeMillis();;
/** Creates a new instance of ElevatorController */
public ElevatorController() {
}
public void setListPanel(ListPanel lPanel){
this.lPanel = lPanel;
}
public void setCurrentFloorPanel(CurrentFloorPanel cfPanel){
this.cfPanel = cfPanel;
}
public void setCallPanelList(ArrayList<CallPanel> cpList){
this.cpList = cpList;
}
public void setOperationPanel(OperationPanel opPanel){
this.opPanel = opPanel;
}
public void setAllBorder(){
for(CallPanel cp:cpList){
cp.resetBorder();
}
cpList.get(Elevator.getCurrentFloor().ordinal()).setBorder();
}
public void run(){
statusWaiting();
}
public void turnOn() {
powerOn = true;
}
public void turnOff() {
powerOn = false;
}
public synchronized void updateList(Floor tf){
Floor cf = elevator.getCurrentFloor();
if(tf.ordinal()>=cf.ordinal())
updateUpCallList(tf);
else
updateDownCallList(tf);
}
public synchronized void updateUpCallList(Floor tf) {
Direction dir = Direction.getDirection();
Floor cf = elevator.getCurrentFloor();
if(upCallList.isFirstEmpty() && !upCallList.isBufferEmpty())
upCallList.swapList();
if(dir.ordinal() == Direction.UP.ordinal() && tf.ordinal()>=cf.ordinal()){
upCallList.addToFirstOrderAZ(tf);
}else if(dir.ordinal()==Direction.UP.ordinal() && tf.ordinal()<cf.ordinal()){
if(upCallList.isFirstEmpty())
upCallList.addToFirstOrderAZ(tf);
else
upCallList.addToBufferOrderAZ(tf);
}else{
upCallList.addToFirstOrderAZ(tf);
}
lPanel.setList(upCallList, downCallList);
}
public synchronized void updateDownCallList(Floor tf) {
Direction dir = Direction.getDirection();
Floor cf = elevator.getCurrentFloor();
if(downCallList.isFirstEmpty() && !downCallList.isBufferEmpty())
downCallList.swapList();
if(dir.ordinal()==Direction.DOWN.ordinal() && tf.ordinal()<=cf.ordinal()){
downCallList.addToFirstOrderZA(tf);
}else if(dir.ordinal()==Direction.DOWN.ordinal() && tf.ordinal()>cf.ordinal()){
if(downCallList.isFirstEmpty())
downCallList.addToFirstOrderZA(tf);
else
downCallList.addToBufferOrderZA(tf);
}else{
downCallList.addToFirstOrderZA(tf);
}
lPanel.setList(upCallList, downCallList);
}
public synchronized static Floor getTargetFloor(){
Direction dir = Direction.getDirection();
if(dir.ordinal()==Direction.UP.ordinal()){
if(!upCallList.isFirstEmpty())
return upCallList.getFirstElement();
else{
upCallList.swapList();
Direction.setDirectionDown();
return downCallList.getFirstElement();
}
}else if(dir.ordinal()==Direction.DOWN.ordinal()){
if(!downCallList.isFirstEmpty())
return downCallList.getFirstElement();
else{
downCallList.swapList();
Direction.setDirectionUp();
return upCallList.getFirstElement();
}
}else{
if(upCallList.isEmpty()&!downCallList.isEmpty())
return downCallList.getFirstElement();
else if(upCallList.isEmpty()&!downCallList.isEmpty())
return upCallList.getFirstElement();
else
return Elevator.getCurrentFloor();
}
}
private void statusWaiting() {
lPanel.setList(upCallList, downCallList);
while(isPowerOn()){
statusOperating();
try{
Thread.sleep(10);
}catch(Exception e){
e.printStackTrace();
}
if(isDoorOpen()){
statusDoorOpenning();
}
}
}
private void move(){
moving = true;
}
private void stop(){
moving = false;
}
private boolean isMoving(){
return moving;
}
private void statusOperating() {
Floor cf,tf;
while(!(upCallList.isEmpty()&downCallList.isEmpty())){
lPanel.setList(upCallList, downCallList);
move();
tf = getTargetFloor();
cf = elevator.getCurrentFloor();
if(tf.ordinal()==cf.ordinal()){
statusDoorOpenning();
if(!(upCallList.isEmpty()&downCallList.isEmpty()))
achieveTF();
}else{
statusMoving();
statusDoorOpenning();
if(!(upCallList.isEmpty()&downCallList.isEmpty()))
achieveTF();
}
}
lPanel.setList(upCallList, downCallList);
}
private void statusDoorOpenning(){
setAllStatusPanel();
stop();
cpList.get(elevator.getCurrentFloor().ordinal()).openDoor();
openDoor();
while(isDoorOpen()){
try{
Thread.sleep(10);
}catch(Exception e){
e.printStackTrace();
}
if((System.currentTimeMillis()-time)>2000){
closeDoor();
}
}
cpList.get(elevator.getCurrentFloor().ordinal()).closeDoor();
setAllStatusPanel();
}
private boolean isDoorOpen(){
return doorOpen;
}
private void statusMoving(){
Direction dir = Direction.getDirection();
//超重要方向判定
if(dir.ordinal()==Direction.NO_DIRECTION.ordinal()){
if(getTargetFloor().ordinal()>elevator.getCurrentFloor().ordinal())
Direction.setDirectionUp();
else if(getTargetFloor().ordinal()<elevator.getCurrentFloor().ordinal())
Direction.setDirectionDown();
}
/*
if((dir.ordinal()==Direction.NO_DIRECTION.ordinal() && !upCallList.isFirstEmpty())||
(dir.ordinal()==Direction.NO_DIRECTION.ordinal() && downCallList.isFirstEmpty())){
Direction.setDirectionUp();
}else{
Direction.setDirectionDown();
}
*/
setAllStatusPanel();
if(elevator.getCurrentFloor().ordinal()<=getTargetFloor().ordinal())
statusMovingUp();
else
statusMovingDown();
}
private void statusMovingUp(){
while(ge
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
JAVA实现的模拟电梯系统 (111个子文件)
Baseline.class 20KB
Baseline.class 20KB
GroupLayout.class 16KB
GroupLayout.class 16KB
AquaBaseline.class 15KB
AquaBaseline.class 15KB
AquaLayoutStyle.class 14KB
AquaLayoutStyle.class 14KB
GroupLayout$SequentialGroup.class 9KB
GroupLayout$SequentialGroup.class 9KB
ElevatorController.class 8KB
ElevatorSimulator.class 7KB
LayoutStyle.class 6KB
LayoutStyle.class 6KB
GroupLayout$AutopaddingSpring.class 5KB
GroupLayout$AutopaddingSpring.class 5KB
GroupLayout$ParallelGroup.class 5KB
GroupLayout$ParallelGroup.class 5KB
GroupLayout$ComponentSpring.class 5KB
GroupLayout$ComponentSpring.class 5KB
GroupLayout$Group.class 4KB
GroupLayout$Group.class 4KB
GroupLayout$ComponentInfo.class 4KB
GroupLayout$ComponentInfo.class 4KB
MetalLayoutStyle.class 4KB
MetalLayoutStyle.class 4KB
ListPanel.class 3KB
GroupLayout$ContainerAutopaddingSpring.class 3KB
GroupLayout$ContainerAutopaddingSpring.class 3KB
CallPanel.class 3KB
CallList.class 3KB
WindowsLayoutStyle.class 3KB
WindowsLayoutStyle.class 3KB
OperationPanel.class 3KB
AbsoluteLayout.class 3KB
AbsoluteLayout.class 3KB
Door.class 2KB
GroupLayout$BaselineGroup.class 2KB
GroupLayout$BaselineGroup.class 2KB
GroupLayout$Spring.class 2KB
GroupLayout$Spring.class 2KB
StatusPanel.class 2KB
DirectionButton.class 2KB
CurrentFloorPanel.class 2KB
GroupLayout$PaddingSpring.class 2KB
GroupLayout$PaddingSpring.class 2KB
Button.class 2KB
AquaLayoutStyle$ComponentInsets.class 2KB
AquaLayoutStyle$ComponentInsets.class 2KB
Direction.class 2KB
AbsoluteConstraints.class 2KB
AbsoluteConstraints.class 2KB
Floor.class 2KB
FloorButton.class 1KB
FloorPanel.class 1KB
OperationButton.class 1KB
GroupLayout$AutopaddingMatch.class 1KB
GroupLayout$AutopaddingMatch.class 1KB
GnomeLayoutStyle.class 1KB
GnomeLayoutStyle.class 1KB
Elevator.class 1KB
Operation.class 1KB
GroupLayout$GapSpring.class 1KB
GroupLayout$GapSpring.class 1KB
GroupLayout$SpringDelta.class 1003B
GroupLayout$SpringDelta.class 1003B
ElevatorController$1.class 819B
OperationButton$1.class 769B
ElevatorSimulator$1.class 769B
DirectionButton$1.class 766B
CallPanel$1.class 734B
Button$1.class 713B
ElevatorSimulator$2.class 568B
GroupLayout$1.class 214B
GroupLayout$1.class 214B
ElevatorSimulator.form 6KB
ListPanel.form 4KB
Door.form 4KB
StatusPanel.form 4KB
CallPanel.form 3KB
OperationPanel.form 3KB
FloorPanel.form 2KB
CurrentFloorPanel.form 1KB
ElevatorSimulator.jar 96KB
ElevatorSimulator.jar 96KB
ElevatorController.java 10KB
ElevatorSimulator.java 8KB
CallList.java 5KB
ListPanel.java 5KB
OperationPanel.java 4KB
CallPanel.java 4KB
Door.java 3KB
StatusPanel.java 3KB
Elevator.java 2KB
CurrentFloorPanel.java 2KB
FloorPanel.java 1KB
DirectionButton.java 1KB
Button.java 1KB
FloorButton.java 1KB
OperationButton.java 1019B
共 111 条
- 1
- 2
资源评论
young88
- 粉丝: 0
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功