2013-08-06 3 views
0

Я использую затмение, мой код: -Изображение не может быть расположен Java

package arrowRecog; 

import org.sikuli.api.*; 
import java.io.File; 
import arrowRecog.res.*; 

public class FocusTrain 
{ 
    public static void main(String[] args) throws Exception 
    { 
     Target oneDown = new ImageTarget(new File("arrowRecog.res","1down.jpg")); 
    } 
} 

Дерево:

http://i1316.photobucket.com/albums/t601/Preformer/tree_zps1e15285b.jpg

Исключение:

http://i1316.photobucket.com/albums/t601/Preformer/error_zps05bc7502.jpg

ответ

0

Я понятия не имею, почему вы кладете ресурсы без исходного кода в каталог src. Каталоги здесь интерпретируются Eclipse как пакеты, поэтому они отображаются в формате «folder.subfolder». Класс File использует файловую систему, а не формат пути Java-класса, поэтому «arrowRecog.res» не будет интерпретироваться как каталог «arrowRecog» с подкаталогом «res», но он будет искать каталог «arrowRecog.res», что делает не существует. Другими словами, точка не будет использоваться для разделителя путей, но как часть имени каталога.

Кроме того, поскольку вы используете относительные пути, это означает относительно рабочего каталога. Рабочий каталог по умолчанию является основным каталогом проекта в Eclipse (если я правильно помню). Таким образом, вам не хватает директории «src» на ваших путях.

new File("src/arrowRecog/res/1down.jpg") 

или

new File("arrowRecog/res/1down.jpg") 

, вероятно, следует работать, в зависимости от того, как установить рабочий каталог.

Самое лучшее, что нужно сделать, это создать новый каталог рядом с Src каталог (называемый разрешением, например) и все изображения переезжать туда.

5

Проблема заключается в «\ 1» части строкового литерала. Это не обратная косая черта, за которой следует 1 - это восьмеричная escape-последовательность, дающая U + 0001. Для того, чтобы получить строку вы прицеливания для, вы хотите:

Target oneDown = new ImageTarget(new File("arrowRecog.res\\1down.jpg")); 

Или лучше - более портативными:

Target oneDown = new ImageTarget(new File("arrowRecog.res/1down.jpg")); 

Или еще лучше:

Target oneDown = new ImageTarget(new File("arrowRecog.res", "1down.jpg")); 

(На практике все платформы I «Я использовал Java on, с помощью / в качестве разделителя каталогов, но использование конструктора File, использующего две строки, по-прежнему является хорошей идеей в целом.)

+0

Пробовал третье исправление, я все равно получаю точно такое же исключение. Можете ли я проверить свое дерево? Его слабая точка – Preformer

+0

@Preformer: Нет, вы не получите * точно * то же исключение. Посмотрите на скриншот, который вы опубликовали, а затем на исключение, которое вы получаете - посмотрите на имена (непосредственно перед «down.jpg»). Теперь, если у вас нет файла в нужном месте относительно того, где вы используете код, это отдельная проблема. –

+0

Да, это то же самое. Теперь, когда вы видели мой код, дерево и исключение, где, по-моему, должны быть файлы jpeg? – Preformer