• 締切済み

JavaWebStart でダウンロード直後かどうかを判定するには

JWS (Java Web Start) で Java アプリケーションを WEB サーバから配布します。このとき、WEB サーバ上の jar ファイルを更新したときユーザに jar ファイルをダウンロードさせる、というのが JWS のデフォルトの動きになりますが、アプリケーション側で、(更新)ダウンロードされてから最初のアプリ起動であるか否かを判定するにはどうしたらよいでしょうか。 具体的なシチュエーションとしては、アプリケーションが、自分自身の jar ファイル内のファイルを、ローカル環境にプレーンファイルとして展開してそれを使用したいのですが、起動のたびに展開すると時間がかかるので、jar ファイルが更新されたとき、つまりサーバからダウンロードした直後の起動のときだけそれを行いたいのです。 展開したファイルの作成日時と jar ファイルの作成日時が比較できればよいのですが、自分自身の jar ファイルを java.io.File オブジェクトとして認識する方法がわかりません。また、JNLP ファイルの property に時刻やバージョンなどを書き込むことでも実装はできるのですが、jar ファイルの更新のたびにそれを更新するのも面倒なのでやりたくない、という状況です。 よろしくお願いします。

  • Java
  • 回答数2
  • ありがとう数3

みんなの回答

  • aton
  • ベストアンサー率47% (160/334)
回答No.2

>Java Web Start 経由で起動すると、どうしても file: から始まらず、ネットワークが切断されていようとも必ず http: で始まる文字列になってしまいます。何がまずいでしょうか。 Java Web Start 経由での起動はやったことがなかったので(そんなんで「経験者」「自信あり」にするのはどうかしてると思うのですが>自分),そうなってしまいましたか…。 では,展開するファイルをabc.datとして, URL url =(jarファイル内のクラスのインスタンス).getClass().getClassLoader().getResource("abc.dat"); JarEntry entry = ((JarURLConnection) url.openConnection()).getJarEntry(); long time = entry.getTime(); で,abc.datのエントリーの修正日時を取り出し,ローカルに展開したファイルの修正日時と比較するというのはどうでしょうか? これで展開の要否の判断はできないでしょうか? ちなみに修正日時の取り出しは,一応手元で(JWSではなく)JARファイルに適用したコードを書いてみた限りではうまくいったのですが,JWSではどうかわからないので「一般人」「参考意見」にしておきます。 >それから、! の位置は、 ...hogehoge.jar!/abc.dat でした。 そうですね。私の間違いでした。 ちなみに, >java.net.URI には ! のことは載ってないのですねえ については, http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/net/JarURLConnection.html に載っていました。

参考URL:
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/net/JarURLConnection.html
beubeu
質問者

お礼

> URL url =(jarファイル内のクラスのインスタンス).getClass().getClassLoader().getResource("abc.dat"); > JarEntry entry = ((JarURLConnection) url.openConnection()).getJarEntry(); > long time = entry.getTime(); 似たような形で、jar ファイルの中身でなくて jar ファイル自身でやってみました。 まだ細かい戻り値などは見ていないのですが、Java Web Start の機能なのか、ネットワークが切れていても、何故か(?)上手い具合に動くようです。 これで行こうと思います。ありがとうございました。 > >java.net.URI には ! のことは載ってないのですねえ > については, > http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/net/Jar...​ こちらでしたか (^^;

  • aton
  • ベストアンサー率47% (160/334)
回答No.1

java.lang.ClassLoaderのgetResource(String)あるいはfindResource(String)が使えると思います。 jarファイルの中にabc.datというファイルが含まれているとして, String path = (jarファイル内のクラスのインスタンス).getClass().getClassLoader().getResource("abc.dat").getPath(); これでpathには"file:(jarファイルの絶対パス)!abc.dat"という文字列が入っているので,あとはいらない部分を切り取ればjarファイルの絶対パスが得られます。但しjava.lang.ClassLoader#getResource(String)の戻り値はURLであり,従ってpathにISO-8859-1以外の文字が含まれている場合はURLエンコードされています。 #まあ"!abc.dat"を切り取って,"file:(jarファイルの絶対パス)"から #java.net.URIのインスタンスを作り,これからjava.io.Fileのインス #タンスを作れば問題ないと思いますが。

参考URL:
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/ClassLoader.html#getResource(java.lang.String)
beubeu
質問者

お礼

フォローありがとうございます。 なるほど、そういうやり方がありましたか。これなら日時比較ができます。ありがとうございました。 ただ、RFC による URL の定義や、java.net.URI には ! のことは載ってないのですねえ。

beubeu
質問者

補足

Java Web Start 経由で起動すると、どうしても file: から始まらず、ネットワークが切断されていようとも必ず http: で始まる文字列になってしまいます。何がまずいでしょうか。 それから、! の位置は、 ...hogehoge.jar!/abc.dat でした。

関連するQ&A

  • Java Web Start の起動第1歩でつまずいています

    Java3Dで開発したプログラムをJava3Dをインストールしていない仲間にも見てもらおうと考えOKWave殿に質問したところ、Java Web Start を立ち上がるようにすればできるのではないかとの回答を得て、とりかかりはじめました。 Java TM Web Startの開発者ガイド(http://sdc.sun.co.jp/java/docs/products/javawebstart/1.2/ja/docs/developersguide_ja.html)によれば、先ず下記をするようにとの記述があります。 - 引用開始 - 1 Java Web Start の MIME タイプを使用するように Web サーバを構成する 拡張子 .jnlp を持つすべてのファイルが application/x-java-jnlp-file MIME タイプに設定されるように、Web サーバを構成します。 たいていの Web ブラウザは、Web サーバからコンテンツと共に返される MIME タイプを使って、特定のコンテンツの処理方法を決定します。Java Web Start の呼び出しを有効にするには、サーバが JNLP ファイルに対して application/x-java-jnlp-file MIME タイプを返す必要があります。 Web サーバごとに、MIME タイプを追加する特定の方法があります。たとえば、Apache Web サーバでは、.mime.types 構成ファイルに次の行を追加する必要があります。 application/x-java-jnlp-file JNLP 使用する Web サーバの仕様については、マニュアルを参照してください。 ー 引用終了 - 具体的には、どのような操作をすれば良いのか下記の質問4項目について教えていただきたく質問します。 1)「使用するWeb サーバの仕様については、マニュアルを参照してください。」とありますが、私の場合、Yahoo/GeocitiesのWebサーバを主に使っているのですが、マニュアルは不明です。多くの場合、Apache Web サーバであるということで、上に書かれたように設定すればよいのでしょうか? 2)次に、MIME タイプの設定ですが、これは、自分のパソコンのエクスプローラ/ツールにあるフォルダオプションで「ファイルの種類の編集」をしていけばよいのでしょうか?上のガイドに書かれたことを「ファイルの種類の編集」方法で実施する手順がわからず、具体的操作方法を教えていただきたく存じます。 3)私は、この最初の設定を行わずに、次のステップの「アプリケーション用の JNLP ファイルを作成する」と「jarファイル作成」をしてオフラインにてJNLP ファイルをダブルクリックしたところ、「JavaStarting」は表示されたのですが、その後、「このアプリケーションを起動できません」のアプリケーションエラー・メッセージが表示されてしまいました。このエラーは最初の設定をすれば解消するのでしょうか?エラーとなる要素が、まだ他にも考えられるでしょうか? 4)それと、Java Web Start で表示させるためには、プログラムはアプリケーション方式に限り、アプレット方式では起動させられないのでしょうか? 以上、教えていただきたくよろしくお願いいたします。

  • Java 3D Web Start のソースコード一例を教えてください

    私は、Java3Dでプログラムを作成しています。 作成したプログラムの実行結果を仲間に示したいのですが、多くの仲間はJavaJREについてはプレインストールパソコンを使っていますが、Java3Dはインストールしておらず見てもらうことができません。 先日、OKWave殿を通じてJavaWebStartの存在を知り、特に紹介されたJavaNetのJava 3D Web Start( https://j3d-webstart.dev.java.net/test/ )には、rotating cube、moving sphereなどいくつかの3Dサンプルが画面をクリックすると見ることができます。 ただし、いずれも jnlpファイルで紹介されていて、ソースコードは紹介されていません。 JavaWebStartは、プログラム(ソースコード)を作成後、classファイルをjarファイルにかためて、jnlpファイルと共にWebサーバにアップすることでプログラム実行結果を仲間にも見てもらえるようになりますが、私の認識ではSwingで書かれたアプリケーション、しかもjnlpファイルのapplication-desc 要素にはオプション属性 main-class を記載するため、ソースコードには、「public static void main(String argv[]) メソッドを含む、最初に実行されるクラス」の記載が必要になってくるかと思います。 Swingアプリケーションを扱う多くのサイトに紹介されているコンポーネント、レイアウトなどを示すサンプルソースコードは上の方法にて、JWSで表示させることができたのですが、3DをJavaNet社のサンプルのように表示させることができていません。 java3D Web Startで表す3Dの簡単モデル(できれば、回転アニメ、behaviorなど動きのあるもの)をソースコードとともに、またWebサーバにアップするまでの手順を教えていただきたいと存じます。

    • ベストアンサー
    • Java
  • 署名付きアプレット

    はじめまして。久美子といいます。 http://www.mki.ne.jp/developers/doc/sign/SignedApplet.htmlに書いてあるのを参考にしていまして、 1. keytool を使ってキーペアの作成と署名 2. jarsigner を使ってJAR ファイルに対して署名 3. JNLP ファイルの作成 4. keytool -export を使ってキーペアから証明書を   エクスポート まで作業してのですが 5.『エクスポートされた証明書 を各クライアントにインポートする。』ができません。 スタート→ファイル名を指定して実行→javawsと入力したら、Java Web Startアプリケーションマネージャーではなく、javaアプリケーションキャッシュビューアが出てきて、それ以降の作業が進めないのです。 ずっと悩んでいまして、教えていただけないでしょうか?   ------------------------------------ 環境 ------------------------------------ WinXP JDK 1.5.0_05

    • ベストアンサー
    • Java
  • javaでJavaWebStartを起動する方法

    javaのイベントで、JWSを起動したいので、以下のようにしましたが、 起動はするのですが、10秒程Internet Explorerのフレームがモニターいっぱいに表示されてしまいます。また、ダウンロード中のウィンドウが、止まり起動しない事がしばしば有ります。 JWSのショートやっとやWEBベージのリンクを押したときのように、直接すぐに起動したいです。 方法をご存知の方がおられましたら教えてください。 よろしくお願いいたします。 try { Runtime.getRuntime().exec( "c:\\Program Files\\Internet Explorer\\iexplore.exe http://hato*******.ne.jp/jws/test.jnlp"); } catch (Exception ex) { ex.printStackTrace(); }

    • ベストアンサー
    • Java
  • iアプリは、jarファイルをダウンロードしたディレクトリ以下にしか、HTTP通信できない?

    こんにちは。 iアプリの制作をしていますが、 基本的に携帯端末にダウンロードしたiアプリは、 本体のjarファイルが置かれているWebサーバー以外とは HTTP通信できないと思うのですが、さらに 「Webサーバーの、Jarファイルが格納されているディレクトリ以下にしか 通信できない」という縛りがある機能があると聞きました。 ・アプリ連携起動 ・ブラウザ連携起動 の機能をアプリに実装すると、そういった、 Webサーバーの、Jarファイル以下のディレクトリにしかアクセスできない というのは本当でしょうか? キャリアのWebページにある、技術資料 http://www.nttdocomo.co.jp/p_s/imode/make/java/index.html 「iアプリコンテンツ開発ガイド for DoJa-4.0 詳細編」 に目を通したのですが、 それらしい記述がみつかりませんでした。 もしそれが本当であるなら、そういった技術資料の 何ページ目に記述されている、という形で教えてください。 どなたかご存知の方、よろしくお願い致します。

  • minecraft

    minecraftサーバーにmodを入れるやり方 minecraftでサーバーにmodを入れたくてwikiを見ながらサーバーを立てました!(.jarです) 1.公式minecraftHPから「Minecraft_Sever.jar」をデスクトップにDLし、拡張子が「.zip」になっていたので「.jar」に書き換えました。 2.「Minecraft_Sever.jar」を7zipで開いて、そのなかにテキストファイルを作成し、[@echo off java -Xms1024M -Xmx1024M -jar minecraft_server.jar nogui pause]と[@echo off start /b /wait java -Xms1024M -Xmx1024M -jar minecraft_server.jar nogui]を書き込みました。そしてそのテキストファイルを 「Minecraft_sever.bat]にリネームしました。 ここでこのテキストファイルを起動すればコマンドプロンプトのウィンドウが表示され、必要なファイルがminecraft.netのサーバーからダウンロードされるはずなんですが、されません! やりかたがまちがっているのでしょうか?? ほかにも[http://www.nicovideo.jp/watch/sm17095163]この動画を見ながらやったんですが、[Minecraft_Sever.jar]を起動することがなぜかできません。 やりかたがまるで違ってたら、みなさんが見ていた成功したサイトを教えてください。

  • ダウンロードについて

    ASP.NET(VB.NET)でWebアプリケーションの製作をしています。 トップページからログインさせて、その後サーバーに置いてあるファイル(エクセルファイル)へのリンクを張って、ダウンロードさせています。 ですが、ログインしていなくてもファイルのアドレスを直打ちするとダウンロードが可能となります。 ログインしないとダウンロードできなくする方法はありますか? どうかよろしくご教授下さいませ。

  • 自分自身を更新するプログラム

    こんにちは。 Webからダウンロードしてきて自分自身を更新するアプリケーションをが見かけるのですが 具体的にはどのように実装されているのでしょうか? いくつか自動更新系のアプリケーションを見かけたのですが、 ・別の更新用プログラムっぽいものを起動して、アプリケーションを更新する。 ・自分自身で更新しようとするもの。 の二種類ありました。前者はなんとなく出来そうな気がするのですが、 後者は自分自身の実行ファイルを上書きできないと思うのです。 後者の場合はどのように自分自身を更新しているのでしょうか? もしご存じの方がいらっしゃいましたら教えていただけないでしょうか。 よろしくお願いします。

  • 閉じた環境下での Java Web Start は可能でしょうか?

    閉じた環境下での Java Web Start は可能でしょうか? イントラネット内の Web サーバに対して接続し、 Java Web Start を利用しようとした場合というのは jar ファイルを実行可能なのでしょうか? しかも、クライアントに java がインストールされてない場合に どういう動作になるのかも出来れば知りたいです。 よろしくお願いします!

    • ベストアンサー
    • Java
  • xls形式でダウンロード

    【環境】 ・サーバー環境 OS:fedora7 webサーバー:APACHE2 webDB:PostgreSQL8 言語:PHP5、JAVA、JS ・クライアント環境 OS:WINDOWSXP ブラウザ:IE6 サーバーはデータセンターにあり、 光ファイバーにて接続します。 【状況】 上記環境にてWebアプリケーションを提供しておりますが、 お客様の要望により、CSVファイルではなくエクセルファイルで 帳票をダウンロードできるようにと要望があり、 xls形式でダウンロードするプログラムを作成しました。 WriteExcel(PHP版)というクラスを使っております。 xls形式のファイルの要望が沢山あり、 その中で印刷範囲を設定してダウンロードしなければならず、 対応しましたが、 お客様の環境では印刷範囲の設定だけがされずエクセルファイルが作成されてしまいます。 弊社の環境及びその他色々な環境で試してみましたが、 印刷範囲が設定されてエクセルファイルが作成されております。 【仮説】 エクセルファイルはCGIにてサーバーで作成されている為、 お客様の環境に原因があるのではと考えております。 【対応】 お客様を訪問して状況を確認しようと考えておりますが、 お客様の環境のどこを改善すれば良いと思いますか? お客様のエクセルバージョンは2000及び2003であるとお聞きしておりますが、 弊社の2002ではOKだったので、エクセルの問題ではないように思います。 エクセルの問題でないとしたら、次にチェックする項目は何だと思いますか?

    • 締切済み
    • PHP

専門家に質問してみよう