Java程序能编译成功但是不能运行

想知道为什么这个程序运行不了,编译没问题,但是打不开控制台,点击运行后鼠标一直在转圈圈。在eclipse上面运行的(主方法在本文最下方)。我在eclipse上搜索“控制台”,它显示“无效的线程访问”。


package MyPackage;

public abstract class Origin {
    protected int Pos;
    protected int Gear;
    protected int Speed;
    
    public Origin() {
        Pos=0;
        Gear=1;
        Speed=0;
    }
    
    public int getPos() {
        return Pos;
    }
    public void setPos(int pos) {
        Pos = pos;
    }
    public int getGear() {
        return Gear;
    }
    public void setGear(int gear) {
        Gear = gear;
    }
    public int getSpeed() {
        return Speed;
    }
    public void setSpeed(int speed) {
        Speed = speed;
    }
    public abstract void upPos();
    public abstract void downPos();
    public abstract void upGear();
    public abstract void downGear();
    public abstract void sum_speed();
    public void show_details() {
        System.out.println("当前档位为:"+getPos());
        System.out.println("当前刻度盘指针为:"+getGear());
        System.out.println("当前速度为:"+getSpeed());
    }
}

package MyPackage;

public class Triple extends Origin {
    @Override
    public void upPos() {
        if(getPos()<3) {
            Pos++;
        }
        else {
            System.out.println("无法再提高一个档位!");
        }
    }
    @Override
    public void downPos() {
        if(getPos()>0) {
            Pos--;
        }
        else {
            System.out.println("无法再下降一个档位!");
        }
    }
    @Override
    public void upGear() {
        if(getGear()<3) {
            Gear++;
        }
        else {
            System.out.println("无法再将刻度盘指针上调!");
        }
    }
    @Override
    public void downGear() {
        if(getGear()>1) {
            Gear++;
        }
        else {
            System.out.println("无法再将刻度盘指针下调!");
        }
    }
    @Override
    public void sum_speed() {
        switch(getPos()) {
        case 0:Speed=0;break;
        case 1:switch(getGear()) {
            case 1:Speed=4;break;
            case 2:Speed=6;break;
            case 3:Speed=12;break;
        };break;
        case 2:Speed=30;break;
        case 3:Speed=60;break;
        }
    }
}



package MyPackage;

public class Quadra extends Origin{
    @Override
    public void upPos() {
        if(getPos()<4) {
            Pos++;
        }
        else {
            System.out.println("无法再提高一个档位!");
        }
    }
    @Override
    public void downPos() {
        if(getPos()>0) {
            Pos--;
        }
        else {
            System.out.println("无法再下降一个档位!");
        }
    }
    @Override
    public void upGear() {
        if(getGear()<4) {
            Gear++;
        }
        else {
            System.out.println("无法再将刻度盘指针上调!");
        }
    }
    @Override
    public void downGear() {
        if(getGear()>1) {
            Gear++;
        }
        else {
            System.out.println("无法再将刻度盘指针下调!");
        }
    }
    @Override
    public void  sum_speed() {
        switch(getPos()) {
        case 0:Speed=0;break;
        case 1:switch(getGear()) {
            case 1:Speed=4;break;
            case 2:Speed=6;break;
            case 3:Speed=12;break;
            case 4:Speed=20;break;
        };break;
        case 2:Speed=30;break;
        case 3:Speed=60;break;
        case 4:Speed=90;break;
        }
    }
    
}


package MyPackage;

import java.util.Scanner;

public class Temp {
    private int flag;        //操作标志:0代表不做任何操作;1代表控制杆上调;-1代表控制杆下调;2代表刻度盘指针上调;-2代表刻度盘指针下调。
    Scanner input=new Scanner(System.in);
    
    public Temp() {
        flag=0;
    }
    
    public int getFlag() {
        return flag;
    }
    
    public void setFlag() {
        flag=input.nextInt();
    }
    
    public void promptTable() {
        System.out.println("请按照下面提示输入操作命令:");
        System.out.println("0----------不做任何操作;");
        System.out.println("1----------上调控制杆;");
        System.out.println("-1---------下调控制杆;");
        System.out.println("2----------上调刻度盘指针;");
        System.out.println("-2---------下调刻度盘指针;");
    }
    
    public void Control(Origin origin) {
        promptTable();
        while(flag!=-404) {
            setFlag();
            if(getFlag()==0) {
                origin.show_details();
            }
            else if(getFlag()==1) {
                origin.upPos();
                origin.sum_speed();
                origin.show_details();
            }
            else if(getFlag()==-1) {
                origin.downPos();
                origin.sum_speed();
                origin.show_details();
            }
            else if(getFlag()==2) {
                origin.upGear();
                origin.sum_speed();
                origin.show_details();
            }
            else if(getFlag()==-2){
                origin.downGear();
                origin.sum_speed();
                origin.show_details();
            }
        }
    }
}


package MyPackage;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Triple triple=new Triple();
        Quadra quadra=new Quadra();
        Temp temp=new Temp();
        Scanner input=new Scanner(System.in);
        int selection=input.nextInt();
        switch (selection) {
        case 1: {
            temp.Control(triple);
        }break;
        case 2:{
            temp.Control(quadra);
        }break;
        default:
            throw new IllegalArgumentException("Unexpected value: " + selection);
        }
    }
}