0

現在、JFrame を JApplet に変換しようとしています。

Eclipse ではアプレットとして正常に動作しますが、Web サイトで使用しようとするとエラーが発生します。

ここに私のアプレットがあります: http://tekhaxs.com/applet.java

そこにある ^^ または以下で、私の Java ソースを表示できます。

ここにエラーがあります: http://tekhaxs.com/?page_id=146

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JApplet;
import javax.swing.JButton;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import javax.imageio.ImageIO;

public class applet extends JApplet
{
    JButton newBut = new JButton("New");
    JButton backBut = new JButton("Back");
    Font font;

    BufferedImage img = null;
    BufferedImage background = null;

    URL url = null;

    String extension;

    int linkNum = 0;
    int total = 0;
    int backNum = 0;
    String appending;

    ArrayList<String> az = new ArrayList<String>();
    ArrayList<String> history = new ArrayList<String>();



public void init()                  //initialize everything.
{
    this.setLayout(null);

    backBut.addActionListener(new buttonListener());
    this.add(backBut);
    backBut.setBounds(300, 5, 80, 35);

    newBut.addActionListener(new buttonListener());
    this.add(newBut);
    newBut.setBounds(400, 5, 80, 35);

    font = new Font("arial",Font.BOLD,20);
    makeArrays();
    changeUrlExtension();

    try {
        background = ImageIO.read(new URL("http://puu.sh/3a7KY/d2ba48949c.png"));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

class buttonListener implements ActionListener  //Button Listener for next.
{

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        if(e.getSource() == backBut){
            backNum++;
            extension = history.get(total - backNum - 1);
            repaint();
        }else if(e.getSource() == newBut){
            backNum = 0;
            changeUrlExtension();
            history.add(extension);
            total++;
            repaint();
        }
    }

}

public void changeUrlExtension(){
    int a1 = (int) Math.round(Math.random() * 51);
    int a2 = (int) Math.round(Math.random() * 51);
    int a3 = (int) Math.round(Math.random() * 51);
    String aaa = (az.get(a3)+az.get(a2)+az.get(a1));
    int linkNum = (int) Math.round(Math.random() * 13) + 20;

    extension = linkNum+aaa;

    try {
        url = new URL("http://puu.sh/"+extension+".png");
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
}

public void paint(Graphics g) {                 //Paints Graphics for frame.
   g.drawImage(background, 0, 0, null);
   g.drawImage(getImage(), 5, 50, null);
   g.setColor(Color.MAGENTA);
   g.drawString("Current Picture: http://puu.sh/"+extension+".png", 10,40);
   g.setFont(font);
   g.drawString("Picture Number: "+(total - backNum), 10,20);
}

public Image getImage(){                        //Returns Image from url.
    try {
        url = new URL("http://puu.sh/"+extension+".png");
    } catch (IOException e) {
        e.printStackTrace();
    }


    try {
        img = ImageIO.read(url);
        System.out.println(total+". "+url);
    } catch (IOException e) {
        changeUrlExtension();
        getImage();
    }

    return img;
}

public void makeArrays(){                       //Makes az Array.
      az.add("A");
      az.add("a");
      az.add("B");
      az.add("b");
      az.add("C");
      az.add("c");
      az.add("D");
      az.add("d");
      az.add("E");
      az.add("e");
      az.add("F");
      az.add("f");
      az.add("G");
      az.add("g");
      az.add("H");
      az.add("h");
      az.add("I");
      az.add("i");
      az.add("J");
      az.add("j");
      az.add("K");
      az.add("k");
      az.add("L");
      az.add("l");
      az.add("M");
      az.add("m");
      az.add("N");
      az.add("n");
      az.add("O");
      az.add("o");
      az.add("P");
      az.add("p");
      az.add("Q");
      az.add("q");
      az.add("R");
      az.add("r");
      az.add("S");
      az.add("s");
      az.add("T");
      az.add("t");
      az.add("U");
      az.add("u");
      az.add("V");
      az.add("v");
      az.add("W");
      az.add("w");
      az.add("X");
      az.add("x");
      az.add("Y");
      az.add("y");
      az.add("Z");
      az.add("z");    
}
}

JApplet を呼び出すために使用する html コードを次に示します。

<applet code="http://tekhaxs.com/applet.java" width="400" height="400">
If your browser was Java-enabled, a Puush Browser would appear here.
</applet>

このエラーを修正する方法について何か提案はありますか?

4

1 に答える 1

0

アプレットのクラス ファイルcodeを属性に指定する必要があります。

<applet code="applet.class" width="400" height="400">

これは、クラス ファイルが html ファイルと同じ場所にある場合に機能します。クラス ファイルが別の場所にある場合は、追加のcodebase属性を使用して場所を指定する必要があります。たとえば、クラス ファイルがbinサブディレクトリにある場合は、次のように指定します。

<applet code="applet.class" codebase="bin" width="400" height="400">

詳細については、 http://www.duckware.com/applets/reference.htmlを参照してください。

本質的に、

  • code.は、パッケージ名を含むメイン アプレット クラスのクラスを参照し、 の.classように接尾辞を付けcode="com.example.SampleApplet.class"ます。
  • codebaseで指定されたクラス ファイルがある場所を参照する URL (相対または絶対)codeです。htmlファイルと同じ場所であればcodebase省略可能です。

今、別のエラーが発生しています。

Access denied ("java.net.SocketPermission""Puu.sh:80""connect,ressolve")

アプレット コードには、ソケットを使用するために必要なアクセス権がありません (コード内で行う puu.sh へのアクセスに必要です)。アプレットはクライアント マシンで実行されており、デフォルトではサンドボックス外へのアクセスは許可されていないことに注意してください。

クライアント マシンでいわゆるポリシー ファイルを作成することで、権限を調整できます。詳細については、 http://download.java.net/jdk8/docs/technotes/guides/security/PolicyFiles.htmlを参照してください。これはクライアント側で行う必要があることに注意してください。

アプレットが存在するのと同じサーバーに画像を配置しようとします。その後、セキュリティ ポリシーを変更せずにダウンロードできるはずです。

于 2013-06-07T08:41:14.960 に答える