【问题标题】:Jlayer in a Jpanel with circular loading bar带有圆形加载条的 Jpanel 中的 Jlayer
【发布时间】:2014-03-25 16:34:12
【问题描述】:

这是我使用 Jlayer 制作圆形加载栏的示例,但现在图层在执行 btnLoad.addActionListener() 后开始和停止,并在确定的计时器 (4000) 一段时间后停止,所以我需要它的问题当我单击按钮加载时开始 并在文件加载完成后停止!!!

  final WaitLayerUI layerUI = new WaitLayerUI();

       jlayer = new JLayer<JPanel>(this, layerUI);

        final Timer stopper = new Timer(4000,new ActionListener() {
              public void actionPerformed(ActionEvent ae) {
                layerUI.stop();
              }
            });
            stopper.setRepeats(false);
          if (!stopper.isRunning()) {
            stopper.start();
          }
        btnLoad.addActionListener(
          new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
              layerUI.start();
              DataManager dataManager = new DataManager();
              try {
        dataManager.loadFromFile("C:/Users/*****PC/Downloads/****.csv");
            } catch (Exception e) {

                e.printStackTrace();
            }
            }
          }
        );

【问题讨论】:

  • 在这里忽略答案,错了,Swing Timer 是正确的方法,我确定 Jlayer 的动画有几次,顺便说一句,这是 MadProgrammer 的区域
  • @MadProgrammer 我仍然认为这是你的领域

标签: java swing jpanel jlayer


【解决方案1】:

您应该将文件加载到另一个Thread 而不是Event Dispatch Thread。假设您的 loadFromFile 方法在加载文件之前一直阻塞,那么您可以隐藏该层,但您必须隐藏在 Event Dispatch Thread 而不是您为加载文件而开始的新 Thread

删除你的计时器并用这个替换你的 try 块:

    try {
        new Thread(new Runnable(){
            public void run() {
                dataManager.loadFromFile("C:/Users/*****PC/Downloads/****.csv");
                EventQueue.invokeLater(new Runnable(){
                    public void run() {
                        layerUI.stop();
                    }
                });
            }
        }).start();
    } catch (Exception e) {
        e.printStackTrace();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    相关资源
    最近更新 更多