模拟打印小票(支持暂停功能)

public class MainFrame extends JFrame {

    private JButton printButton = new JButton("打印");
    private JButton suspendButton = new JButton("暂停");

    private JLabel printText = new JLabel("模拟小票打印");
    private JTextArea printTextArea = new JTextArea();

    //判断暂停、继续
    private boolean suspend = false;

    //新建一个对象
    Object lock = new Object();

    public MainFrame() {
        initFrame();
        bindEvent();
    }

    private void initFrame() {
        setTitle("模拟小票打印");
        setSize(800, 500);
        setVisible(true);
        setLayout(null);
        setResizable(false);
        setLocationRelativeTo(null);
        Font labelFont = new Font(Font.SERIF, Font.BOLD, 23);

        printText.setBounds(360, 30, 200, 50);
        printText.setFont(labelFont);

        printTextArea.setBounds(200, 100, 420, 160);
        printTextArea.setFont(labelFont);

        printButton.setBounds(new Rectangle(260, 300, 100, 50));
        printButton.setFont(labelFont);

        suspendButton.setBounds(new Rectangle(460, 300, 100, 50));
        suspendButton.setFont(labelFont);

        add(printButton);
        add(suspendButton);
        add(printText);
        add(printTextArea);
    }

    private void bindEvent() {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        printTextArea.setText("准备打印");
        printButton.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                new Thread(() -> {
                    try {
                        synchronized (lock) {
                            for (int i = 10001; i < 100000; i++) {
                                printTextArea.setText("当前打印单号为:" + i);
                                Thread.sleep(1000);
                                //根据 suspend 来判断 是否让当前线程wait
                                while (suspend) {
                                    int n = i + 1;
                                    printTextArea.setText("打印暂停, 再次打印从" + n + "开始");
                                    lock.wait();
                                }
                            }
                        }
                    } catch (Exception e1) {
                        e1.printStackTrace();
                    }
                }).start();
            }
        });

        //暂停/继续 操作
        suspendButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                if (suspend) {
                    suspend = false;
                    suspendButton.setText("暂停");
                    synchronized (lock) {
                        //唤醒当前线程
                        lock.notifyAll();
                    }
                } else {
                    suspend = true;
                    suspendButton.setText("继续");
                }
            }
        });
    }}

??exe ??请看??

原文地址:https://www.cnblogs.com/dreammyone/p/9960278.html

时间: 2024-11-11 07:40:46

模拟打印小票(支持暂停功能)的相关文章

【Cocos游戏实战】功夫小子第七课之游戏主功能场景逻辑功能和暂停功能场景的分析和实现

CSDN的markdown编辑器是吃屎了么! !.什么玩意.!写了一半写不了东西还全没了,搞个毛线! 本节课的视频教程地址是:第七课在此 假设本教程有帮助到您,希望您能点击进去观看一下,并且如今注冊成为极客学院的会员,能够免费领取30天学习时间,免费拿极客学院VIP,1000+高清视频.学习Android.HTML5.iOS各种开发技术,限时领取.手快的戳:http://e.jikexueyuan.com/invite/index.html?ZnJvbV9jb2RlPVkxblJUZSZ1bmF

UiPath如何实现暂停功能?

照理说一个无人值守的机器人原本是不应该有人工操作介入的,也就不会提供暂停功能.但客户可能出于业务需要,或者风险管控的考虑,会需要机器人具备暂停功能.通常,会希望在机器人运行时,用户摁下快捷键,机器人就马上暂停,而暂停之后也能够恢复. 那么如何在机器人执行正常业务流程的同时,检测快捷键是否被摁下呢?这里可以使用Pick(System.Activities.Statements.Pick)来实现这个效果.如下图如示.左侧只是用来模拟通常的业务流程,各位可以将自己实际的workflow放进去.右侧分支

iOS Bluetooth 打印小票(二)

在上一篇中介绍了打印小票所需要的命令,这一篇介绍Bluetooth连接蓝牙和打印小票的全过程. CoreBluetooth的封装 因为CoreBluetooth中的代理太多,而每一次操作又比较依赖上一次操作的结果,方法又比较零散,所以我做了粗略封装,把代理改成了block方式回调. 1.获取蓝牙管理单例 HLBLEManager *manager = [HLBLEManager sharedInstance]; __weak HLBLEManager *weakManager = manager

支持HCE功能的NFC手机(Android)、 支持NFC功能的手机大全(安卓、微软、塞班、苹果)

支持HCE功能的Android手机需要满足如下条件: 1.支持NFC功能 2.操作系统是Android 3.Android版本4.4 如果满足条件1.2,但是通过刷机满足条件3也成立. 说明:对于NFC发烧友,如果囊中羞涩,不妨购买二手手机(刷机满足要求的二手手机更实惠)发烧.淘宝上价廉物美的很多! HCE(Host-based Card Emulation)是一个模拟智能卡的软件,在Android中就是一个apk.HCE的特点是模拟智能IC卡(ISO 7816-4),可用于金融和行业应用,HC

C# 收银机顾显(客显)及打印小票(58热敏打印机)

最近做winform收银机,设计顾显及打印小票总结. 1.顾显(串口COM1) 只涉及到总计,所以只是简单的功能. public static ClientDisplayResult Display(decimal total, bool isClear=false) { var result = new ClientDisplayResult(); string[] ports = SerialPort.GetPortNames(); if (ports.Length == 0) { resu

输入6个人的成绩放入到一个一维数组中,然后打印出平均分,最后按成绩 从大到小打印。三个功能(输入是一个函数,求平均分是一个函数,排序是一个 函数)都用函数实现,最后在main方法中调用。

/*5.输入6个人的成绩放入到一个一维数组中,然后打印出平均分,最后按成绩从大到小打印.三个功能(输入是一个函数,求平均分是一个函数,排序是一个函数)都用函数实现,最后在main方法中调用.*/ #include <stdio.h> int inputScore(){ int score; scanf("%d",&score); return score;} double avg(int scores[],int length){ int i,score = 0;

手机支持USB功能、驱动文件对应关系

手机支持USB功能: 1.UMS(USB MASS Stronge) : 连接PC作为存储盘使用 2.ADB : 用于调试 3.MTP :连接PC作为存储盘使用(win XP需要安装WMP10 以上 win7以上自动包含有) 4.PTP : 类似于相机导入功能 5.RNDIS : 虚拟网卡 (PC通过手机网络上网等)  驱动文件对应关系:   1.android_winusb.inf ---> ADB功能   2.cdc_acm.inf ---> USB串口功能 3.tetherxp.inf

【大话QT之八】模拟QQ系统设置面板实现功能

业务需求: 基于网盘客户端的实现,原有网盘的设置面板无论从界面显示还是从业务需求都不能满足我们的正常需求.当前的要求是,模拟QQ系统设置的面板实现当前我们网盘中的基本配置功能.在完成这篇文章时已将基本功能实现完成,虽未整合进网盘客户端中,但基本技术预演已经实现. QQ系统设置面板分析: QQ系统设置面板效果图: QQ系统设置面板功能描述: 由于存在较多的配置,如果每个模块的配置项都设计到一个窗体中,则会存在很多的窗体,不太符合用户的使用体验,且程序编写也比较麻烦.QQ系统设置面板中的实现是,所有

让C++控制台程序停下来,实现暂停功能

让C++控制台程序停下来,实现暂停功能 一.针对Microsoft #include   <stdlib.h> (1)第一种方式system( "PAUSE "); -------------------- (2)第二种方式getchar();  // 这招对QT程序也有用--------------------- (3)第三种方式Sleep(); 二.针对Linux(1)第一种方式 getchar(); 参考: http://www.cppblog.com/lauer39