- PR -

JavaWebStartの配布ファイルのサイズ制限について

投稿者投稿内容
ねこばば
会議室デビュー日: 2004/01/19
投稿数: 8
投稿日時: 2004-01-19 01:39
はじめまして、ねこばばといいます。

JavaWebStartでプログラムを配布しようとしたところ、
なぜか途中でセキュリティ権限エラーが発生してしまいます。
jarsignerコマンドで確かに署名を付加してある為、何度も試したところ
Zip関連の例外エラーだったり、ファイルが異常である事を示すエラーが
帰ってきたり、結果がさまざまである事が分かりました。

いろいろ考えたのですが、ファイルサイズに問題があるのかもと考え、
今、画像ファイルを減らしたり、パッケージ名を短縮したりと
考慮しています。
実際のところ、WebStart機能にファイルサイズ、またはパッケージ名の長さに
制限はあるのでしょうか?
また、WebStart機能について詳しく書かれてある著書を
知ってらっしゃる方がいましたら、教えてください。
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-01-20 14:16
一応お伺いしますが、JNLPの配備記述ファイル(*.jnlp)に、「このSigned-Jarが
ユーザに要求する権限」に関する記述をしていますか?ファイルI/Oやソケット生成
など、クライアントのローカル環境へのサンドボックス制限を超えるアクセスが必要
なアプリケーションなら、AllPermissionなど、必要十分な権限を要求しておくべき
かと思います。
そのような権限要求がJNLPに正しく記述してあれば、アプリケーションの初回起動
時に認証ダイアログが表示されるはずです。
ねこばば
会議室デビュー日: 2004/01/19
投稿数: 8
投稿日時: 2004-01-22 00:34
やはりファイルサイズに問題あったようです。
320×320ドットのgifファイルを画像ファイルとしてjarに格納しているのですが、
2kバイトと64kバイトとでは、実行結果が異なりました。
2kバイトだとうまくプログラムのDL→認証→起動と行う事が確認できたのですが、
64kバイトだとどうしても認証エラーなどさまざまな原因の特定できないエラーが
帰ってきます。
トレースログには、classファイルの認証エラーだったり、gifファイルだったりします。

この問題は通信速度によるものなのかもしれません。
どちらにしろファイルサイズが小さい大きいだけで左右される代物だと思うと、
がっかりです。何か良い方法があればどなたか教えてください。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-01-22 13:19
unibon です。こんにちわ。

引用:

ねこばばさんの書き込み (2004-01-22 00:34) より:
2kバイトだとうまくプログラムのDL→認証→起動と行う事が確認できたのですが、
64kバイトだとどうしても認証エラーなどさまざまな原因の特定できないエラーが
帰ってきます。


#良く知らないのですが、思いつきだけで書きます。
64KB という数値で思いつくものとしては、クラスローダ絡みの制約なのかもしれません。Java Applet とも共通性はあるのでは、と推測するので一度試しに署名したアプレットでも試されてはどうでしょうか。
あと、可能ならばスタックトレースを提示されると、どなたか分かるかたがいらっしゃるかもしれません。
ねこばば
会議室デビュー日: 2004/01/19
投稿数: 8
投稿日時: 2004-03-05 03:48
何度か試したのですが、どうやら画像ファイルを正しくロードできていないみたいです。
WebStartで画像ファイルをロードするときは、どうすればよいのでしょうか?
.jar圧縮された内部のファイルパスはどう指定すればよいのか分かりません。
分かる方、教えてください。
ちなみに、jarで実行するときと、WebStartで実行するときとでは、ディレクトリパスは
変更して、指定する必要があるのでしょうか?
jarのままだと読めるのですが、WebStartだと認識できません。

-----------------------------------------------------
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import javax.jnlp.*;

public class SampleJnlp extends JFrame{

private Image ImgChipData;

JLabel helloLabel = new JLabel();
JLabel userLabel = new JLabel();
JLabel pwlLabel = new JLabel();
JLabel userText = new JLabel();
JPasswordField pwField = new JPasswordField();

public static void main( String[] args ){
SampleJnlp sj = new SampleJnlp( "SampleJnlp", 0 );
}

protected void setupUI( int ui ){
addWindowListener( new WindowAdapter(){
public void windowClosing( WindowEvent e ){
System.exit( 0 );
}
});

try{
if( ui == 0 ){
UIManager.setLookAndFeel( "com.sun.java.swing.plaf.metal.MetalLookAndFeel" );
} else {
UIManager.setLookAndFeel( "com.sun.java.swing.plaf.motif.MotifLookAndFeel" );
}
SwingUtilities.updateComponentTreeUI( this );
} catch( Exception e ){}
}

public SampleJnlp( String title, int ui ){
setTitle( title );
setupUI( ui );

ImgChipData = Toolkit.getDefaultToolkit().getImage( this.getClass().getResource( "IMAGE/img.gif" );
pack();
show();
}

public boolean showURL( String href ){
try{
BasicService bs = ( BasicService )ServiceManager.lookup( "javax.jnlp.BasicService" );
URL baseURL = bs.getCodeBase();
URL url = new URL( baseURL, href );
return bs.showDocument( url );
} catch( UnavailableServiceException ue ){
return false;
} catch( MalformedURLException me ){
return false;
}
}

public void paint( Graphics g ){
if( ImgChipData != null ){
g.drawImage( ImgChipData, 50, 50, ImgChipData.getWidth( this ), ImgChipData.getHeight( this ), this );
}
}

}
-----------------------------------------------------

開発環境:
Eclipse:Version: 2.1.2
J2SDK:build 1.4.2_03-b02, mixed mode
OS:WindowsXP Professional

かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2004-03-05 08:53
Class.getResource()でリソースを読み込む場合、
指定されたクラスが属するパッケージ名の"."を"/"に変えた上で、パッケージ名+"/"+指定したリソースパスを検索しに行きます。

デフォルトパッケージの場合どうなるかはわかりませんが、読みに行くリソースパスと実際のリソースの配置場所にくいちがいがあるのではないでしょうか?

JW
常連さん
会議室デビュー日: 2004/01/14
投稿数: 49
投稿日時: 2004-03-05 14:35
単なる想像の域を出ませんが、
引用:

Zip関連の例外エラーだったり、ファイルが異常である事を示すエラーが
帰ってきたり、結果がさまざまである事が分かりました。


だったり、ファイルの内容(jarに含める画像)によってはうまくいく、
との事から、本当にファイルが壊れているだけということは無いですか?
FTPでASCIIモードでWebサーバに上げたとか。
(たまたまファイル中に 0x0D が無ければ壊れないので、ファイルサイズが
小さければ、少しは壊れない可能性が高い…)

ねこばば
会議室デビュー日: 2004/01/19
投稿数: 8
投稿日時: 2004-03-06 14:43
[quote]
かずくんさんの書き込み (2004-03-05 08:53) より:
Class.getResource()でリソースを読み込む場合、
指定されたクラスが属するパッケージ名の"."を"/"に変えた上で、パッケージ名+"/"+指定したリソースパスを検索しに行きます。

デフォルトパッケージの場合どうなるかはわかりませんが、読みに行くリソースパスと実際のリソースの配置場所にくいちがいがあるのではないでしょうか?

返信ありがとうございます。
ここで質問させていただいている内容は、クラスファイルの読み込み方法ではなく、
画像ファイルです。ただ純粋にjar圧縮ファイルからイメージファイルをロードしたいだけなのですが、webstartから読み込むとnullが返ってきます。
別の画像ファイルを用意したのですがやはり同じでした。
普段皆さんは画像ファイルをロードするときどうやって処理しているのでしょうか?

スキルアップ/キャリアアップ(JOB@IT)