java - 监听器在 Swing 应用程序中无法正常工作

标签 java swing scanning

我有以下示例类,它使用 uk.co.mmscomputing.device.scanner.Scanner 类连接到 twain.dll 驱动程序来扫描页面:

public class ScannerManager implements ScannerListener{

       static ScannerManager app;  

       Scanner scanner;
       String fileName;

       public ScannerManager() throws ScannerIOException{

        scanner=Scanner.getDevice();
        scanner.addListener(this);    
        scanner.acquire();
       }



    public void update(ScannerIOMetadata.Type type, ScannerIOMetadata metadata){

        if(type.equals(ScannerIOMetadata.ACQUIRED)){

          BufferedImage image=metadata.getImage();
          System.out.println("ACQUIRED!");
            String file = UIMessages.showInputMessage("Enter file name");
          try{
            ImageIO.write(image, "png", new File(Constants.getPathBusta()  + File.separatorChar + file));
            fileName = Constants.getPathBusta()  + File.separatorChar + file;

          }catch(Exception e){
            e.printStackTrace();
          }
        }else if(type.equals(ScannerIOMetadata.NEGOTIATE)){

          ScannerDevice device=metadata.getDevice();
          try{
            device.setShowUserInterface(true);
            device.setShowProgressBar(true);
            device.setResolution(100);
          }catch(Exception e){
            e.printStackTrace();
          }
        }else if(type.equals(ScannerIOMetadata.STATECHANGE)){

          System.err.println(metadata.getStateStr());
          if(metadata.isFinished()){
            System.exit(0);
          }
        }else if(type.equals(ScannerIOMetadata.EXCEPTION)){

          metadata.getException().printStackTrace();
        }
      }

      public static void main(String[] argv){
        try{
          app=new ScannerManager( );
        }catch(Exception e){
          e.printStackTrace();
        }
      }

}

在运行主方法时它工作得很好,但是我需要从 Swing jButton 点击事件中调用它: 令人惊讶的是,它的工作原理并不相同:

buttonAcquire.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {

                    ScannerManager scanner = new ScannerManager();

                } catch (ScannerIOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                    defaultCursor();
                }

            }
});

条件:

  if(type.equals(ScannerIOMetadata.ACQUIRED))

从未满足,因此从 Swing 线程执行时事件似乎没有被正确拦截。你能给我任何提示吗?我真的很困惑,我不知道可能是什么问题......

最佳答案

尝试让 Swing 类本身监听 ScannerListener 事件。换句话说,将代码移动到 Swing UI 部分并查看它是否有效。

关于java - 监听器在 Swing 应用程序中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27418446/

相关文章:

java - 从 gradle 调用的 Ant sshexec 任务不显示输出

java - 使用绝对定位将组件添加到框架

java - 为什么我的 Swing GUI 没有显示所有添加的按钮?

java - 更新 jtable java 时出现问题

java - 当前目录 java 中的文件和文件夹数组和有效字符串

android - 图像识别框架/指南-增强现实

java - 如何连续扫描输入到控制台?

java - 管理项目依赖关系的最佳方式是什么

java - JList 组件中 JCheckBox 的边距

java - 让 Joda Time 使用我的 bukkit 插件时遇到问题