2010-12-27 3 views
0

Я решил создать свой собственный класс роботов Java в андроиде для захвата экрана. Я написал исходный код класса робота самостоятельно, но проблема здесь, следующая строка в коде бросает компиляцию error..saying «метод createRobot (Робот, GraphicsDevice) в ComponentFactory типа не применяется для аргументов (робот, GraphicsDevice)»ошибка в создании моего собственного класса роботов в android

одноранговых = ((ComponentFactory) инструментария) .createRobot (это, экран);

Может кто-нибудь предложить мне, что было бы решение ....

спасибо ..

+0

Это означает, что он говорит, чтобы убедиться, что «это» является экземпляром Robot и экран является экземпляром GraphicsDevice. – Nishant

+0

Посмотрите на мой ответ для моего полного кода – manju

ответ

0

здесь мой полный исходный код

пакет com.example.awt;

импорт java.awt.AWTException; импорт java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.Rectangle; импорт java.awt.peer. ; импорт java.awt.image.; импорт java.awt.event. *; import java.lang.reflect.InvocationTargetException;

// import com.sun.media.sound.Toolkit;

импорт sun.awt.ComponentFactory; // import sun.awt.SunToolkit; импорт sun.security.util.SecurityConstants; импорт java.awt.Toolkit;

общественного класса Robot {

private static final int MAX_DELAY = 60000; 
private RobotPeer peer; 
    private boolean isAutoWaitForIdle = false; 
    private int autoDelay = 0; 
    private static final int LEGAL_BUTTON_MASK = 
         InputEvent.BUTTON1_MASK| 
         InputEvent.BUTTON2_MASK| 
         InputEvent.BUTTON3_MASK; 

    private DirectColorModel screenCapCM = null; 

    public Robot() throws AWTException { 
      if (GraphicsEnvironment.isHeadless()) { 
       throw new AWTException ("headless environment"); 
     } 
     init(GraphicsEnvironment.getLocalGraphicsEnvironment() 
      .getDefaultScreenDevice()); 

     } 
    private void init(GraphicsDevice screen) throws AWTException { 
     checkRobotAllowed(); 
      Toolkit toolkit = Toolkit.getDefaultToolkit(); 
      if (toolkit instanceof ComponentFactory) { 
       peer = ((ComponentFactory)toolkit).createRobot(this, screen); 
      } 
     } 
    public Robot(GraphicsDevice screen) throws AWTException { 
     checkIsScreenDevice(screen); 
      init(screen); 
    } 

    private void checkRobotAllowed() { 
    SecurityManager security = System.getSecurityManager(); 
     if (security != null) { 
      security.checkPermission(SecurityConstants.CREATE_ROBOT_PERMISSION); 
     } 
     } 

    private void checkIsScreenDevice(GraphicsDevice device) { 
      if (device == null || device.getType() != GraphicsDevice.TYPE_RASTER_SCREEN) { 
       throw new IllegalArgumentException ("not a valid screen device"); 
      } 

    } 
    public synchronized BufferedImage createScreenCapture(Rectangle screenRect) { 
     checkScreenCaptureAllowed(); 
     checkValidRect(screenRect); 

     BufferedImage image; 
     DataBufferInt buffer; 
     WritableRaster raster; 

     if (screenCapCM == null) { 
      /* 
    284   * Fix for 4285201 
    285   * Create a DirectColorModel equivalent to the default RGB ColorModel, 
    286   * except with no Alpha component. 
      */ 

      screenCapCM = new DirectColorModel(24, 
          /* red mask */ 0x00FF0000, 
          /* green mask */ 0x0000FF00, 
          /* blue mask */ 0x000000FF); 
     } 

     int pixels[]; 
     int[] bandmasks = new int[3]; 

     pixels = peer.getRGBPixels(screenRect); 
     buffer = new DataBufferInt(pixels, pixels.length); 

     bandmasks[0] = screenCapCM.getRedMask(); 
     bandmasks[1] = screenCapCM.getGreenMask(); 
     bandmasks[2] = screenCapCM.getBlueMask(); 

     raster = Raster.createPackedRaster(buffer, screenRect.width, screenRect.height, screenRect.width, bandmasks, null); 

     image = new BufferedImage(screenCapCM, raster, false, null); 

     return image; 
     } 
    private static void checkValidRect(Rectangle rect) { 
     if (rect.width <= 0 || rect.height <= 0) { 
      throw new IllegalArgumentException ("Rectangle width and height must be > 0"); 
     } 
     } 
    private static void checkScreenCaptureAllowed() { 
     SecurityManager security = System.getSecurityManager(); 
     if (security != null) { 
      security.checkPermission(
      SecurityConstants.READ_DISPLAY_PIXELS_PERMISSION); 
     } 
     } 

}

+0

Это должно быть редактирование исходного вопроса, потому что это НЕ ответ, а пояснение. – smith324

+0

Не то, чтобы я понятия не имею, что вы делаете, и меня устаревают в моей внутренней среде Java. Вы передаете свой указатель 'this' на свой завод от своего конструктора. Вы уверены, что ваш класс робота полностью инициализирован, прежде чем передать его в createRobot()? – Falmarri

Смежные вопросы