title: uk.co.mmscomputing twain scanner works with cannon scanner only
body: <p>I have a uk.co.mmscomputing applet for scanning through web application. It works fine with Cannon DR-9080C scanner. Recently I purchased Kodak i2600 scanner and it is not working with my applet. The scanner scans all pages in the tray when i click Acquire for the first time but when I load more pages and click Acquire again, I get "Java Stopped Working" error.</p>
  
  <p>I tried setting up uk.co.mmscomputing again but it was not helpful.</p>
  
  <pre><code>package uk.co.mmscomputing.application.imageviewer;
  
  import java.io.*;
  import java.awt.image.*;
  import javax.swing.*;
  import uk.co.mmscomputing.device.scanner.*;
  
  import uk.co.mmscomputing.device.twain.*;
  
  
  public class ScannerTab extends ImageTab implements ScannerListener{
  
    static private int no=1;
  
    public ScannerTab(java.util.Properties properties){
  
        super(properties);
    }
  
    @Override
  protected void setButtonPanel(JPanel gui){
      super.setButtonPanel(gui);
  
      try{
  
  
        Scanner scanner=Scanner.getDevice();            // get a device and set GUI panel up
        if(scanner!=null){
          gui.add(scanner.getScanGUI());
          scanner.addListener(this);
  
          if(scanner instanceof TwainScanner){
            TwainIdentity[] list=((TwainScanner)scanner).getIdentities();
            for(int i=0;i&lt;list.length;i++){
              System.out.println(list[i].toString());
            }
          }
        }
      }catch(Exception e){
        System.out.println("9\b"+getClass().getName()+".setButtonPanel:\n\t"+e);
      }
    }
  
    public void update(ScannerIOMetadata.Type type, final ScannerIOMetadata metadata){
      if(type.equals(ScannerIOMetadata.ACQUIRED)){    // acquired BufferedImage
        final BufferedImage image=metadata.getImage();// make reference copy here to avoid race condition
        new Thread(){
          @Override
          public void run(){
            try{
              addImage("scan_"+(no++),image);
            }catch(Exception e){
              System.out.println("9\b"+getClass().getName()+".update:\n\t"+e);
              System.err.println(getClass().getName()+".update:\n\t"+e);
              e.printStackTrace();
            }
          }
        }.start();
      }else if(type.equals(ScannerIOMetadata.FILE)){  // acquired image as file (twain only for the time being)
        final File file=metadata.getFile();           // make reference copy here to avoid race condition
        new Thread(){
          @Override
          public void run(){
            try{
              open(file.getPath());
            }catch(Exception e){
              System.out.println("9\b"+getClass().getName()+".update:\n\t"+e);
              System.err.println(getClass().getName()+".update:\n\t"+e);
              e.printStackTrace();
            }finally{
              if(!file.delete()){
                System.out.println("9\b"+getClass().getName()+".update:\n\tCould not delete: "+file.getPath());
                System.err.println(getClass().getName()+".update:\n\tCould not delete: "+file.getPath());
              }
            }
          }
        }.start();
      }else if(type.equals(ScannerIOMetadata.NEGOTIATE)){
        negotiate(metadata);    
      }else if(type.equals(ScannerIOMetadata.STATECHANGE)){
        System.out.println("Scanner State "+metadata.getStateStr());
  
        if(metadata instanceof TwainIOMetadata){                                // TWAIN only ! 
          if(metadata.isState(TwainConstants.STATE_TRANSFERREADY)){             // state = 6
            TwainSource source = ((TwainIOMetadata)metadata).getSource();
            try{
              TwainImageInfo imageInfo=new TwainImageInfo(source);            
              imageInfo.get();
              System.out.println(imageInfo.toString());
            }catch(Exception e){
              System.out.println("3\b"+getClass().getName()+".update:\n\tCannot retrieve image information.\n\t"+e);
            }
            try{
              TwainImageLayout imageLayout=new TwainImageLayout(source);      
              imageLayout.get();
              System.out.println(imageLayout.toString());
            }catch(Exception e){
              System.out.println("3\b"+getClass().getName()+".update:\n\tCannot retrieve image layout.\n\t"+e);
            }
          }else if(metadata.isState(TwainConstants.STATE_TRANSFERRING)){       // state = 7
  
            TwainSource source = ((TwainIOMetadata)metadata).getSource();
            try{            
              int[] tweis=new int[0x1240-0x1200];
              for(int i=0;i&lt;tweis.length;i++){tweis[i]=0x1200+i;}
  
              TwainExtImageInfo imageInfo=new TwainExtImageInfo(source,tweis);
              imageInfo.get();
              System.out.println(imageInfo.toString());
            }catch(Exception e){
              System.out.println("3\b"+getClass().getName()+".update:\n\tCannot retrieve extra image information.\n\t"+e);
            }
          }
        }
  
      }else if(type.equals(ScannerIOMetadata.INFO)){
        System.out.println(metadata.getInfo());
      }else if(type.equals(ScannerIOMetadata.EXCEPTION)){
        System.out.println("9\b"+metadata.getException().getMessage());
        metadata.getException().printStackTrace();
      }
    }
  
    private void negotiate(ScannerIOMetadata metadata){
  
  
      ScannerDevice sd=metadata.getDevice();                   // SANE &amp; TWAIN
      try{
        sd.setShowUserInterface(false); 
        System.out.println("9\b"+e.getMessage());
      }
  
  
      if(metadata instanceof TwainIOMetadata){                 // TWAIN only!
        TwainSource source=((TwainIOMetadata)metadata).getSource();
  
        try{      
          TwainCapability[] caps=source.getCapabilities();     // print out all the capabilities
          for(int i=0;i&lt;caps.length;i++){
            System.out.println(caps[i].toString());
          }
        }catch(Exception e){
          System.out.println("9\b"+e.getMessage());
        }
  
      }
    }
  }
  </code></pre>