2013-08-06 3 views
0

J'utilise éclipse, mon code: -d'image ne peut pas être situé 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")); 
    } 
} 

L'Arbre:

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

L'exception:

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

Répondre

0

Je n'ai aucune idée pourquoi vous mettez des ressources non-code source dans le répertoire src. Les répertoires ici sont interprétés par Eclipse comme des paquets, ils sont donc affichés dans le format "folder.subfolder". La classe File utilise le système de fichiers, pas le format de chemin de classe java, donc "arrowRecog.res" ne sera pas interprété comme répertoire "arrowRecog" avec le sous-répertoire "res", mais il cherchera le répertoire "arrowRecog.res" - qui fait n'existe pas. En d'autres termes, le point ne sera pas pris pour le délimiteur de chemin, mais en tant que partie du nom du répertoire.

De plus, puisque vous utilisez des chemins relatifs, cela signifie par rapport au répertoire de travail. Le répertoire de travail est par défaut le répertoire principal du projet dans Eclipse (si je me souviens bien). Il vous manque donc le répertoire "src" dans vos chemins.

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

ou

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

devrait probablement travailler, selon la façon dont votre répertoire de travail est défini.

La meilleure chose à faire est de créer un nouveau répertoire à côté du répertoire src (appelé res par exemple) et toutes les images aller là-bas. Essayé le 3ème correctif, j'obtiens toujours exactement la même exception.

5

Le problème est la partie "\ 1" du littéral de chaîne. Ce n'est pas une barre oblique inverse suivie d'un 1 - c'est une séquence d'échappement octale, ce qui donne U + 0001. Pour obtenir la chaîne que vous visiez, vous voulez:

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

Ou mieux - plus portable:

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

Ou encore mieux:

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

(Dans la pratique, chaque plate-forme I 'ai utilisé Java sur a fait face à / comme un séparateur de répertoire, mais en utilisant le constructeur File en prenant deux chaînes est toujours une bonne idée en général.)

+0

Pouvez-vous vérifier mon arbre? C'est mon point faible – Preformer

+0

@Preformer: Non, vous n'obtiendrez pas * exactement * la même exception. Regardez la capture d'écran que vous avez publiée, puis l'exception que vous obtenez - regardez les noms impliqués (juste avant "down.jpg"). Maintenant, si vous n'avez pas le fichier au bon endroit par rapport à l'endroit où vous exécutez le code, c'est un problème distinct. –

+0

Oui, c'est pareil. Maintenant que vous avez vu mon code, mon arbre et mon exception, où devraient se trouver les fichiers jpeg? – Preformer

Questions connexes