私のプラットフォーム:
- ウィンドウズ;
- jdk 7;
- glassfish3;
- Notepad ++;
- cmd;
Glassfishを.warファイルとしてアーカイブしたアプレットをデプロイしたいと思います。
java.io
リソースにアクセスしているときに(つまり、ImageIO.read()
メソッド)アプレットに署名することを避けるために、リソースをjarファイルとしてアーカイブしていません。
これは私が得たものです:
ImageViewerApplet.java
package ImageViewerApplet;
import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
public class ImageViewerApplet extends JApplet implements Serializable
{
private Image BackgroundIMG;
private final int APPLET_W = 600;
private final int APPLET_H = 600;
java.net.URL AppletImgURL = ImageViewerApplet.class.getResource("IMG");
private String IMG_Path = AppletImgURL.getPath();
@Override
public void init()
{
Container MyJApplet = getContentPane();
setSize(APPLET_W, APPLET_H);
String IMG_Path = this.IMG_Path+"/";
File BackgroundIMG_File = new File(IMG_Path+"Board.jpg");
try
{
BackgroundIMG = ImageIO.read(BackgroundIMG_File);
}
catch(Throwable ThEx)
{
Logger.getLogger(ImageViewerApplet.class.getName()).
log(Level.SEVERE, null, ThEx);
}
final ImageViewerPanel MyJPanel = new ImageViewerPanel(BackgroundIMG);
MyJApplet.add(MyJPanel);
}
}
ImageViewerPanel.java
package ImageViewerApplet;
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
public class ImageViewerPanel extends JPanel
{
private BufferedImage BuffImg = new BufferedImage(600, 600,
BufferedImage.TYPE_INT_RGB);
private Graphics2D Graph = BuffImg.createGraphics();
private Image BackgroundIMG;
public ImageViewerPanel(Image BackgroundIMG)
{
this.BackgroundIMG = BackgroundIMG;
setBackground(Color.pink);
}
@Override
public void paintComponent(Graphics G)
{
Graphics2D Graph2D = (Graphics2D) G;
super.paintComponent(Graph2D);
if(BuffImg == null)
{
System.err.println("BuffImg Is Null");
}
Graph.drawImage(BackgroundIMG, 0, 0, this);
Graph2D.drawImage(BackgroundIMG, 0, 0, this);
}
}
index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en-US">
<HEAD>
<TITLE>Applet HTML Page</TITLE>
</HEAD>
<BODY>
<H3><HR WIDTH="100%">Applet HTML Page<HR WIDTH="100%"></H3>
<P>
<APPLET codebase="java" code="ImageViewerApplet.ImageViewerApplet.class" width=600 height=600>
</APPLET>
</P>
</BODY>
</html>
index.html
ブラウザで通常の方法でハードドライブにアクセスすると、正常に動作し、背景画像が表示されます。
それから私はこれをします:
1) I archive my work on the cmd like this:
-> jar -cvf ImageViewer.war .
2) copy-paste my war file to glassfish "autodeploy" file.
3) after a few seconds this file "ImgViewer.war_deployed" appears,
which means my war file is deployed fine.
次のようにブラウザを使用してローカルホスト上の作業にアクセスするときの問題:
http://localhost:8080/ImgViewer
アプレットが機能しておらず、アプレットをクリックすると次のエラーメッセージが表示されます。
"RuntimeException java.lang.reflect.InvocationTargetException"
詳細をクリックすると、次のように表示されます。
Java Plug-in 10.9.2.05
Using JRE version 1.7.0_09-b05 Java HotSpot(TM) Client VM
User home directory = C:\Documents and Settings\Administrator
----------------------------------------------------
c: clear console window
f: finalize objects on finalization queue
g: garbage collect
h: display this help message
l: dump classloader list
m: print memory usage
o: trigger logging
q: hide console
r: reload policy configuration
s: dump system and deployment properties
t: dump thread list
v: dump thread stack
x: clear classloader cache
0-5: set trace level to <n>
----------------------------------------------------
私はこれを2か月以上解決しようとしていますが、運が悪かったので調査を行いました。誰かがこれを手伝ってください。