0

我目前正在尝试将我的 JFrame 变成 JApplet。

它在 Eclipse 中作为一个小程序运行良好,但是当我尝试在我的网站上使用它时,它给了我一个错误。

这是我的小程序: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/applet/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 回答