Файлы изображений и относительные пути в Scala - PullRequest
2 голосов
/ 15 декабря 2011

Я пытаюсь получить доступ к некоторым изображениям из панели изображений, используя относительный путь. В проекте Eclipse у меня есть папка с изображениями на изображении внутри. Вот мой код:

  val top = new MainFrame {

    title = "Predator and Prey Agent simulation"

    val buttonExit = new Button {
      text = "Exit"
      action = Action("Exit") {
        WorldActor.run(false)
        closer
      }
    }

    val buttonStart = new Button {
      text = "Start"
      action = Action("Start") {
        switchPanes()
      }
    }

    val s = new Dimension(500, 700)

    contents = new ImagePanel(0, 1) {
      for (i <- 0 until 5){
        contents+= new Label("")
      }
      contents += buttonStart
      contents += buttonExit
      contents+= new Label("")

      minimumSize = s
      maximumSize = s
      preferredSize = s
      imagePath = ("\\PredatorPrey\\images\\gnp-canadian-lynx-kitten.jpg")

      }
    }

Каждый раз, когда запускается приведенный выше код, я получаю исключение javax.imageio.IIOException. Вот класс imapePanel:

case class ImagePanel(rows0: Int, cols0: Int) extends GridPanel(rows0, cols0) {
  private var _imagePath = ""
  private var bufferedImage: BufferedImage = null

  def imagePath = _imagePath

  def imagePath_=(value: String) {
    _imagePath = value
    bufferedImage = ImageIO.read(new File(_imagePath))
  }

  override def paintComponent(g: Graphics2D) = {
    if (null != bufferedImage) g.drawImage(bufferedImage, 0, 0, null)
    }
  }

Кто-нибудь знает, как исправить этот путь?

Ответы [ 2 ]

4 голосов
/ 15 декабря 2011

Я просто использую AWT:

import java.awt.Toolkit
val image = Toolkit.getDefaultToolkit.createImage("images/kitten.jpg")

EDIT:

Также удалите \\PredatorPrey\\ из пути к изображению.

РЕДАКТИРОВАТЬ 2: Просто объясняя, что было не так с кодом, как указано в вопросе - когда путь к файлу начинается с «/» (или «\» в Windows), он становится абсолютным (косая черта представляет корень текущей файловой системы / диска). Также код включил имя проекта в путь. Поскольку приложение запускается из внутри проекта, каталог проекта не нужен в пути (вы уже находитесь внутри этого каталога!).

1 голос
/ 15 декабря 2011

Если вы пытаетесь использовать относительный путь, то вам нужно удалить начальный слеш на вашем пути.

imagePath = ("PredatorPrey\\images\\gnp-canadian-lynx-kitten.jpg")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...