我应该如何从我的 Java Applet 中绘制图像?

Posted

技术标签:

【中文标题】我应该如何从我的 Java Applet 中绘制图像?【英文标题】:How am I supposed to draw an image from my Java Applet? 【发布时间】:2014-05-11 08:58:57 【问题描述】:

我不知道如何充分表达这一点,但我可能已经浏览了 10 页关于这个主题的 Google 链接,但没有一个可以帮助我解决我的问题。

我认为这很简单,我只是想将图像添加到我的 java 小程序的 paint 函数中,就像任何其他形状一样,但这对我来说是一场噩梦。

问题在于,每次我尝试运行 drawImage 函数时,它都会提示 Access Denied ("java.io.FilePermission" "Image.jpg" "read")。然而,根本没有任何教程提到这一点,他们只说我应该做以下事情:

import java.applet.*;
import java.awt.*;

Image img;

//These would go in the paint function
img=getImage(getDocumentBase(),"/Image.jpg"); //I have tried without the slash too

g.drawImage(img,20,20,this);

这就是他们所做的一切,对他们有用,但对我不起作用。其他方法对于仅添加图像来说太复杂了,即使我辛辛苦苦地做这些,它也会不断给我“拒绝访问”消息。还有“签名”它的方法,但鉴于我已经尝试过的所有内容,我真的认为这不会有帮助,所以我担心这可能只是另一种浪费的努力。任何教程都没有告诉你让你的小程序签名。

我在“build”(也称为 bin)文件夹中拥有图像和类。

当我包含整个文件路径时,程序似乎运行了,但即使这样,图像也没有显示。更不用说我不能真正包含我自己计算机的完整路径,因为当我实际将它发送给另一个人时它就不起作用了。

拜托,我只是想知道为什么它对我不起作用,但似乎对其他人却完美无缺。那个,如果有办法解决这个问题。

这是我正在做的一个例子:

import java.applet.*;
import java.awt.*;

public class JavaProject extends JApplet

    Image img;

    public void init()
    

        img=getImage(getDocumentBase(),"/Image.jpg");

    



    public void paint(Graphics g)
    
        super.paint(g);

        g.drawImage(img,20,20,this);

    



这是我的 html 文件:

<html>
<head>
    <title> My First Web Page </title>
</head>

<body>
    <applet code="JavaProject.class"  >
    </applet>
</body>
</html>

【问题讨论】:

你的方法getImage()是做什么的? tutorialspoint.com/javaexamples/applet_image.htm 看看 getImage() 应该得到我认为的类的url,类似的东西。我是新手,所以我无法从技术上解释它。 @user3127499 这正是我一直在做的。媒体跟踪器并没有让它变得更好 您是否有可能从文件系统而不是通过 HTTP 运行您的小程序? 【参考方案1】:

根据JApplet java docs 方法getImage(URL url, String name) 应该有两个参数:URL-link to picture 和String name。

方法 getDocumentBase() 是否返回 URL 链接?

【讨论】:

Ops 对不起,我误读了 javadoc:应该有第一个绝对 URL,然后是相对位置,就像你已经完成 getImage(getDocumentBase(), "/Image.jpg".【参考方案2】:

您必须首先了解 Applet,除非已签名,否则可能无法从文件系统中读取。它必须使用类路径资源或从相同位置获取的东西。您必须决定哪些适用于您。如果图像是固定图像,您可以将其作为资源放在类路径中,并使用 Class.getResourceAsStream。如果每次都是不同的图像,则必须使用 HTTP。

【讨论】:

Class.getResourceAsStream 在 Applet 的情况下是否有效?我认为getDocumentBase() 就是为此目的而设计的,用于从类路径访问文件。 这是我在浏览如何放置图像时看到的方法之一。问题是,我不知道如何在我的代码中实现它 如果当然 getResourceAsStream 有效。只需将图像放入jar文件中合适的位置,它就会在那里。【参考方案3】:

如果 “build”(也称为 bin)文件夹中的图像与类一起尝试这个。

import java.awt.Graphics;
import java.awt.Image;
import java.net.URL;

import javax.swing.JApplet;

public class JavaProject extends JApplet 
    Image img;

    public void init() 
        img = getImage(getDocumentBase(), "images/222.png");
        // Please ensure that 222.png is placed under bin/images folder directly
    

    @Override
    public void paint(Graphics g) 
        update(g);
    

    @Override
    public void update(Graphics g) 
        g.drawImage(img, 20, 20, this);

    



先尝试 HTTP URL

URL myURL = new URL("https://www.gravatar.com/avatar/a94613cea642e6e9e2105867bc2e103e?s=32&d=identicon&r=PG&f=1");
img = getImage(myURL);

如果您在 Windows 下使用 Eclipse,请查看以下屏幕截图:

请查看下面的帖子以了解它。

java.io.FilePermission exception - Read from jar file?

【讨论】:

它仍然给我 AccessControlException 错误......叹气,我从来不知道让图像运行起来会有多麻烦 你是如何运行你的小程序的?从 Eclipse 或作为 HTML 页面。 我在帖子中又添加了一个链接。请查看并阅读 cmets。 我将其作为 HTML 页面运行 到目前为止还没有骰子,顺便说一句,我正在使用 NetBeans,如果这有什么不同的话。

以上是关于我应该如何从我的 Java Applet 中绘制图像?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Java Applet 使用箭头键移动球

如何在我的 Java Applet 上运行图像而无需签名?

如何绘制从我的位置到目的地位置的路线?

如何从我的属性中获取两个值以返回到我的main方法?

我应该如何从我的数据库中获取所有消息并返回它

MouseDragged 和 MouseMoved 在 Java Applet 中不起作用