Swing/ClassLoader のバックアップ差分(No.12)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/ClassLoader へ行く。
- 1 (2006-05-22 (月) 09:59:23)
- 2 (2006-05-22 (月) 11:58:24)
- 3 (2006-05-23 (火) 20:41:39)
- 4 (2006-06-06 (火) 18:01:11)
- 5 (2007-07-20 (金) 10:27:44)
- 6 (2007-11-14 (水) 02:47:21)
- 7 (2007-11-14 (水) 03:47:45)
- 8 (2008-02-15 (金) 17:56:30)
- 9 (2009-03-03 (火) 15:12:09)
- 10 (2009-08-18 (火) 20:31:26)
- 11 (2010-01-08 (金) 19:09:42)
- 12 (2011-04-21 (木) 13:22:22)
- 13 (2011-04-22 (金) 17:37:46)
- 14 (2012-03-02 (金) 14:04:06)
- 15 (2012-03-05 (月) 16:19:20)
- 16 (2012-03-22 (木) 16:26:09)
- 17 (2013-03-07 (木) 15:40:39)
- 18 (2014-02-25 (火) 14:47:46)
- 19 (2014-09-01 (月) 04:10:53)
- 20 (2014-09-29 (月) 17:50:02)
- 21 (2014-12-02 (火) 16:06:01)
- 22 (2016-03-03 (木) 17:54:39)
- 23 (2017-02-09 (木) 18:26:35)
- 24 (2017-12-27 (水) 18:30:48)
- 25 (2018-02-27 (火) 14:30:40)
- 26 (2019-07-04 (木) 15:06:37)
- 27 (2021-03-30 (火) 11:07:32)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:ClassLoaderでリソース(URL)を取得 #navi(../) RIGHT:Posted by [[terai]] at 2006-05-22 RIGHT:Posted by [[aterai]] at 2006-05-22 *ClassLoaderでリソース(URL)を取得 [#v8918bae] クラスパスからのエントリ(相対パス風)を使って、ClassLoaderからURLを取得します。 -&jnlp; -&jar; -&zip; #screenshot //#screenshot #ref(http://lh3.ggpht.com/_9Z4BYR88imo/TQTI-UTFN-I/AAAAAAAAATo/6sdQoVO0Kc4/s800/ClassLoader.png) **サンプルコード [#jcd0714c] #code{{ URL url = getClass().getClassLoader().getResource("example/test.png"); //URL url = getClass().getResource("test.png"); JLabel icon = new JLabel(new ImageIcon(url)); JLabel path = new JLabel(url.toString()); }} **解説 [#fc02caf2] ClassLoaderを使用して、位置に依存しない方法でリソース(URL)を取得します。 以下、".\target\classes\example\test.png"にある画像ファイルのURLをクラスパスからのエントリ(相対パス風)を使って取得する場合を考えます。 上記のサンプルに添付しているバッチファイルでは、クラスパスは次のように設定しています。 java -classpath ".\target\classes" example.MainPanel ClassLoader#getResourceメソッドを使用する場合は、以下のようにクラスパスからのエントリを使用します。このエントリは、相対パス風で頭に/は付けず、/区切りで記述します。 #code{{ getClass().getClassLoader().getResource("example/test.png"); //getClass().getClassLoader().getResource("./example/test.png"); //ただし、getClass().getClassLoader().getResource("./example/test.png"); //だとjar内にパッケージした時うまくいかない。 }} ---- ClassLoaderからでは無く、Class#getResourceメソッドを使う方法もあります。この場合、エントリ名がメソッド内で以下のように変換されます。 -相対パス風(頭に/が付かない)の場合 --"." が "/" に変換された、modified_package_nameが名前の前に補完される --例えば、com.example.Testクラスなら、"com/example/" --このサンプルではexample.MainPanelクラスなので、"example/"が補完されて、"example/test.png"になる #code{{ getClass().getResource("test.png"); //getClass().getClassLoader().getResource("example/test.png");と同じ }} -絶対パス風(頭に/が付く)の場合 --modified_package_nameは補完せず、頭の "/" は削除される #code{{ getClass().getResource("/test.png"); //getClass().getClassLoader().getResource("test.png");と同じ //上記の相対パスと同じリソースを取得する場合は、 //getClass().getResource("/example/test.png");としなくてはならない }} ---- クラスパス上に同じエントリ名のリソースが複数存在する場合は、最初に見つかったものが使用されます。 +src.zipをダウンロードして適当な場所に展開する +c:\temp\example\test.png という画像ファイルを別途用意する +1.で展開したフォルダにあるrun.batの6行目(クラスパス)を以下のように変更 set LOCALCLASSPATH=c:\temp;.\target\classes +ant でコンパイルして、修正したrun.batで実行 この場合、src.zipに元々入っていた「適当な場所/test.png」ではなく、「file:/C:/temp/example/test.png」というURLがgetResourceで取得できます。 **参考リンク [#o584993f] -[[位置に依存しない方法でのリソースへのアクセス>http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/lang/resources.html]] -[[Loading Images Using getResource>http://java.sun.com/docs/books/tutorial/uiswing/components/icon.html#getresource]] -[http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/lang/resources.html 位置に依存しない方法でのリソースへのアクセス] -[http://java.sun.com/docs/books/tutorial/uiswing/components/icon.html#getresource Loading Images Using getResource] **コメント [#z19691a0] - 「クラスパスからのパス」などの意味が分かり辛いので、[[JarURLConnection (Java Platform SE 6)>http://java.sun.com/javase/ja/6/docs/ja/api/java/net/JarURLConnection.html]]を参考にして「パス」を「エントリ」に変更してみました。 -- [[terai]] &new{2008-02-15 (金) 18:04:14}; - 「クラスパスからのパス」などの意味が分かり辛いので、[http://java.sun.com/javase/ja/6/docs/ja/api/java/net/JarURLConnection.html JarURLConnection (Java Platform SE 6)]を参考にして「パス」を「エントリ」に変更してみました。 -- [[aterai]] &new{2008-02-15 (金) 18:04:14}; #comment