2014-07-02 3 views
-1

Я определил метод под названием «findRegion()» с типом возврата «Экран». Несмотря на то, что в конце моего метода я возвращаю объект «Экран», моя среда Eclipse IDE по-прежнему показывает ошибку в отношении несоответствия типа возврата. Этот метод заключается в следующем:Возврат объекта по методу

public Screen findRegion(){ 
     try{ 
      Screen screen = new Screen(); 
      int x = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getX() - 10; 
      int y = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getY() - 10; 
      int w = x + 370; 
      int h = y + 300; 
      screen.setRect(x,y,w,h); 
      return screen; 
     } 
     catch(FindFailed e){ 
      e.printStackTrace(); 
     } 

    } 

Целью настоящего кода является создание области с соответствующими размерами. Просьба сообщить об ошибках в моем коде. Thank You

+1

В случае ошибки функция пропустит блок try try «return statement» и ничего не вернет. Я считаю, что это проблема. – cerkiewny

+0

Ключ в том, что в конце * одного пути * вашего метода вы возвращаете объект «Screen». Если ваш код генерирует исключение, то что будет возвращено? – awksp

+0

Вы ничего не возвращаете в случае исключения. – Drona

ответ

0

Если вы ловите исключение, вам также нужно что-то вернуть. В качестве альтернативы вы можете иметь, как показано ниже

public Screen findRegion(){ 
    Screen screen = null; 
    try{ 
     screen = new Screen(); 
     int x = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getX() - 10; 
     int y = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getY() - 10; 
     int w = x + 370; 
     int h = y + 300; 
     screen.setRect(x,y,w,h); 

    } 
    catch(FindFailed e){ 
     e.printStackTrace(); 
    } 
    return screen; 

} 
+0

Спасибо. Это была проблема. Он работает сейчас/ – user3796719

+0

@ user3796719 - Важный вопрос: вы понимаете почему *? –

+0

Да, я сейчас понимаю логику. – user3796719

0

Эта ошибка возникает из-за вашего блока try-catch. Что делать, если возникает ошибка (FindFailed)? Тогда вы ничего не возвращаете!

try { 
    Screen screen = new Screen(); 
    int x = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getX() - 10; 
    int y = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getY() - 10; 
    int w = x + 370; 
    int h = y + 300; 
    screen.setRect(x,y,w,h); 
    return screen; 
} catch (FindFailed e) { 
    e.printStackTrace(); 
    // what to do if this happens? 
    // proper error handling must be done here. Either return 'null' or propagate the error to the calling method! 
} 
// you can even make a return statement here if it is more convenient for you 
0

Ваш метод должен иметь оператор возврата по умолчанию.

(см комментарий для оператора возврата)

public String findRegion(){ 
     try{ 
      Screen screen = new Screen(); 
      int x = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getX() - 10; 
      int y = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getY() - 10; 
      int w = x + 370; 
      int h = y + 300; 
      screen.setRect(x,y,w,h); 
      return screen; // may not come here if any brakage before 
     } 
     catch(FindFailed e){ 
      e.printStackTrace(); 
     } 
     return null; 

    } 

Лучшая практика оказывает только один оператор возврата для метода. Затем ваш код превращается в

public String findRegion(){ 
     Screen screen= null; 
     try{ 
      screen = new Screen(); 
      int x = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getX() - 10; 
      int y = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getY() - 10; 
      int w = x + 370; 
      int h = y + 300; 
      screen.setRect(x,y,w,h); 
     } 
     catch(FindFailed e){ 
      e.printStackTrace(); 
     } 
     return screen; 

    } 
0

Объявите свой экранный объект перед блоком try (вы можете его инициализировать в catch) и вернуть его после блокировки.

0

Так как вы ничего не возвращаются, если происходит FindFailed исключение, поэтому затмение показывает return type mismatch.

Вы должны сделать этот тип кода, как:

public Screen findRegion(){ 
    Screen screen = null; //initialize your variable here with null 
    try{ 
     screen = new Screen(); 
     int x = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getX() - 10; 
     int y = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getY() - 10; 
     int w = x + 370; 
     int h = y + 300; 
     screen.setRect(x,y,w,h); 
    } 
    catch(FindFailed e){ 
     e.printStackTrace(); 
    } 
    return screen; //return screen object if all goes well or null if any exception occurs. 
} 

Примечание: выглядит FindFailed Ваш заказ Exception, вы должны написать пользовательское имя класса исключения заканчивается Exception (это уменьшает путаницу и выглядит как Исключение)

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