我应该如何从我的 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 中绘制图像?的主要内容,如果未能解决你的问题,请参考以下文章