2017-08-31 4 views
0

閲覧ボタン用にダウンロードした画像があります。私は私のmavenプロジェクトのsrc/main/resourcesフォルダに入れました。私のブラウズアクションでは、ここでクラスのための私のコードです:私のjava swingアクションがsrc/main/resourcesで私のイメージを見つけることができないのはなぜですか?

package net.draconia.testcopier.ui.actions; 

import java.awt.event.ActionEvent; 
import java.net.URL; 

import javax.swing.AbstractAction; 
import javax.swing.ImageIcon; 

import org.springframework.stereotype.Component; 
import org.springframework.util.ObjectUtils; 

import net.draconia.testcopier.TestCopierController; 

@Component 
public class Browse extends AbstractAction 
{ 
    private static final long serialVersionUID = 6237458116383473511L; 

    private TestCopierController mObjController; 

    public Browse(final TestCopierController objController) 
    { 
     super(); 

     URL objURL = Browse.class.getResource("./if_8_27829.png"); 

     putValue(SMALL_ICON, new ImageIcon(objURL)); 

     setController(objController); 

    } 

    public void actionPerformed(final ActionEvent objActionEvent) 
    { 
     getController().browseForBackupFolder(); 
    } 

    protected TestCopierController getController() 
    { 
     return(mObjController); 
    } 

    protected void setController(final TestCopierController objController) 
    { 
     mObjController = objController; 
    } 
} 

私はBrowse.class.getResource(...)を介して画像にアクセスしようとしたとき、私は、コンストラクタにヌルを得るのに問題があります。私はファイル名の前に "./"をつけて試してみました。そこにはファイル名がありません。同じ結果が得られます。多分エラーが日食で、私はそれが画像を見ることができない理由私のポンポンファイル内にある場合、私は知らない

<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>net.draconia</groupId> 
    <artifactId>reedelseviertestcopier</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>Reed Elsevier Test Copier</name> 

    <properties> 
     spring.version>4.3.2.RELEASE</spring.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
     </plugins> 
     <resources> 
      <resource> 
       <directory>${basedir}/src/main/resources</directory> 
       <excludes> 
        <exclude>**/*.java</exclude> 
       </excludes> 
      </resource> 
     </resources> 
    </build> 
</project> 

:ここに私のPOMファイルです。実行可能なjarを生成するプロジェクトを実装しようとしていたので、出力ウィンドウなどを生成するためにコマンドラインで実行することができますが、少なくともEclipseで動作するはずです。何かご意見は?

+0

https://stackoverflow.com/search?q=getResource+returns+null –

+0

https://stackoverflow.com/questions/ 13269556/strange-behavior-of-class-getresource-and-classloader-getresource-in-executa /? –

答えて

3

Class.getResource()は、CLASSPATHで検索します。名前は、「/」(「\のu002f」)との絶対名を開始した場合

  • :それはそうする前に、それはあなたが渡された値に基づいて使用するように絶対的なリソース名を構築しますのリソースは、 '/'の後に続く名前の部分です。
  • そうでない場合、絶対名は次の形式のものである:「」

    modified_pa​​ckage_name /名前

    modified_pa​​ckage_nameは、「/」の代わりにこのオブジェクトのパッケージ名( '\ u002e')。

あなたがBrowse.class.getResource("if_8_27829.png")を呼び出すときに、CLASSPATHには存在しない/net/draconia/testcopier/ui/actions/if_8_27829.png、検索されます。

Browse.class.getResource("/if_8_27829.png")に電話し、プログラムの実行時にsrc/main/resourcesがCLASSPATHにあることを確認する必要があります。 (私はMavenに精通していないので、それをどのように管理しているのか分かりません)

+0

美しい!出来た!私は/if_8_27829.pngに変更し、もうnullではありません。ありがとうございました! –

関連する問題