2

相対パスを使用して画像パネルからいくつかの画像にアクセスしようとしています。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)
    }
  }

誰かがそのパスを修正する方法を知っていますか?

4

2 に答える 2

4

私はちょうど awt を使用します:

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

編集:

\\PredatorPrey\\また、画像パスから削除します。

EDIT 2:質問で引用されているコードの何が問題だったかを説明するだけです-ファイルパス名が「/」(またはWindowsでは「\」)で始まる場合、絶対になります(スラッシュは現在のファイルシステムのルートを表します/ドライブ)。また、コードのパスにはプロジェクト名が含まれていました。アプリケーションはプロジェクトから実行されるため、パスにプロジェクト ディレクトリは必要ありません (既にそのディレクトリ内にいます!)。

于 2011-12-15T18:11:20.373 に答える
1

相対パスを使用しようとしている場合は、パスの先頭のスラッシュを削除する必要があります。

imagePath = ("PredatorPrey\\images\\gnp-canadian-lynx-kitten.jpg")
于 2011-12-15T18:09:50.367 に答える