求助:java应用程序中getImage读不到图片问题

ivyziran 2004-12-26 01:13:24
以下代码以applet方式可以显示的图片(后台也有抛出异常),以应用程序方式运行时却看不到图,不知道怎么做才可以读取到图片呢?

/*
<applet code="DisplayImage.class" width=500 height=400>
</applet>
*/

import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;
import java.awt.Image;
import java.net.*;

public class DisplayImage extends java.applet.Applet
{
Image img;
int w = 0;
int h = 0;

public static void main(String[] args)
{
Frame frame = new Frame("Application");
DisplayImage image = new DisplayImage();
frame.add("Center",image);
frame.setSize(200,200);
frame.validate();
frame.setVisible(true);
frame.addWindowListener(new WindowControl(image));
image.init();
image.start();
}

public void init()
{
URL u = null;
try
{
u = new URL("file:/h:/bean/1.gif");
}
catch(Exception e)
{
e.printStackTrace();
}
img = getImage(u);
}

public void paint(Graphics g)
{
w = img.getWidth(this);
h = img.getHeight(this);
g.drawImage(img,20,10,this);
}

public void destroy(){
System.exit(0);
}
}

class WindowControl extends WindowAdapter
{
java.applet.Applet c;

public WindowControl(java.applet.Applet c) {
this.c=c;
}

public void windowClosing(WindowEvent e) {
c.destroy();
}
}

----------------------------------------------------------------------
以applet运行时后台显示的异常是:
java.security.AccessControlException: access denied (java.lang.RuntimePermission
exitVM)
at java.security.AccessControlContext.checkPermission(AccessControlConte
xt.java:269)
at java.security.AccessController.checkPermission(AccessController.java:
401)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:524)
at java.lang.SecurityManager.checkExit(SecurityManager.java:736)
at java.lang.Runtime.exit(Runtime.java:88)
at java.lang.System.exit(System.java:715)
at DisplayImage.destroy(DisplayImage.java:53)
at sun.applet.AppletPanel.run(AppletPanel.java:450)
at java.lang.Thread.run(Thread.java:534)
...全文
272 点赞 收藏 9
写回复
9 条回复
ivyziran 2004年12月27日
程序解决了,最后的程序如下,查看效果地址是:http://ivyziran.cnlife.net/jt.html?name=%B1%FD%BE%ED%B4%D0
----------------------------------
<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.Graphics2D,java.io.File,java.awt.image.*,java.util.*,javax.imageio.*" %><%
//设置页面不缓存 text/html;charset=GB2312
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);

String name = request.getParameter("name");
try
{
if(name!= null && name.length() > 0) name = new String(name.getBytes("ISO-8859-1"),"GB2312");
else name = "";
}
catch(Exception e)
{
//out.println(e.toString());
}

File _file = new File("h:/bean/1.jpg");
Image img = null;
int w = 10;
int h = 10;
try
{
img = javax.imageio.ImageIO.read(_file);
w = img.getWidth(null);
h = img.getHeight(null);
}
catch(Exception e)
{
//out.println(e.toString());
}

// 在内存中创建图象
int width=w, height=h;
int flen = 0;
if(name != null && name.length() > 0)
{
flen = name.length();
}
if(flen > 3) flen = 3;
int fx[] = new int[flen];
int fy[] = new int[flen];
String names[] = new String[flen];
int fx0 = 48;
int fy0 = 174;
switch(flen)
{
case 1:
fx[0] = fx0 + 1;
fy[0] = fy0 + 30;
names[0] = name.substring(0,1);
break;
case 2:
fx[0] = fx0;
fy[0] = fy0;
fx[1] = fx0;
fy[1] = fy0 + 50;
if(name != null && name.length() == 2)
{
names[0] = name.substring(0,1);
names[1] = name.substring(1,2);
}
break;
case 3:
fx[0] = fx0;
fy[0] = fy0;
fx[1] = fx0;
fy[1] = fy0 + 30;
fx[2] = fx0;
fy[2] = fy0 + 60;
if(name != null && name.length() == 3)
{
names[0] = name.substring(0,1);
names[1] = name.substring(1,2);
names[2] = name.substring(2,3);
}
break;
default:
flen = 0;
break;
}
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

// 获取图形上下文
Graphics g = image.getGraphics();
Graphics2D g2 = (Graphics2D)image.getGraphics();

if(img !=null) g.drawImage(img,0,0,null);

if(flen > 0)
{
//设定字体
g2.setColor(new Color(100,58,0));
g2.setFont(new Font("KaiTi_GB2312",Font.BOLD,24));
g2.rotate(-0.25,fx0 + 1,fy0);
for(int i = 0;i < flen; i++)
{
try
{
if(names.length > i)
{
//out.println(names[i]);
//g2.drawString(new String(str.getBytes("GB2312"),"ISO-8859-1"),fx[i],fy[i]);
g2.drawString(names[i],fx[i],fy[i]);
}
}
catch(Exception e)
{
out.println(e.toString());
}
}
}
// 图象生效
g.dispose();

// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
%>

-------------------------------
好了,结贴。谢谢来关注的兄弟
回复 点赞
tomcatjava 2004年12月26日
类似这样访问:
new ImageIcon( ImageIconFactory.class.getClassLoader().getResource( "resource/images/saveas.gif" ) );
回复 点赞
ivyziran 2004年12月26日
我知道为了安全,applet在读取文件这些地方会有些限制,可是不知道是具体哪里受限,比较此例中读取的是本机的图片,而且,显示窗口中也有图片显示,为什么还会有权限控制异常呢?另外,是不是使用了applet的类的应用程序也有这个限制呢?在应用程序中要如何才可以读取图片呢?
会的来帮忙啊。第一次来这里求助,是不是分太少了啊。我马上改到100啊。
回复 点赞
zealVampire 2004年12月26日
java.security.AccessControlException: access denied (java.lang.RuntimePermission
权限
回复 点赞
ivyziran 2004年12月26日
啊,被冲了这么远啊,顶一下。
兄弟来帮忙啊
回复 点赞
ivyziran 2004年12月26日
谢谢先
现用jsp写了如下程序,图片可以读出来了,但是。此程序在参数为汉字的时候却打出问号来了。。不知道哪里编码解码出错了,如果在程序中直接给要输出的变量赋值(汉字),那么就会显示正常。有兴趣的朋友来试试。
----------------------------------------------------------------
访问方式类似:http://localhost/1.jsp?name=%B1%FD%BE%ED%B4%D0
----------------------------------------------------------------
<%@ page contentType="image/jpeg" import="java.awt.*,java.awt.Graphics2D,java.io.File,java.awt.image.*,java.util.*,javax.imageio.*" %><%
//设置页面不缓存 text/html;charset=GB2312
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);

String name = request.getParameter("name");
try
{
if(name!= null && name.length() > 1) name = new String(name.getBytes("ISO-8859-1"),"GB2312");
else name = "";
}
catch(Exception e)
{
//out.println(e.toString());
}

File _file = new File("h:/bean/1.jpg");
Image img = null;
int w = 10;
int h = 10;
try
{
img = javax.imageio.ImageIO.read(_file);
w = img.getWidth(null);
h = img.getHeight(null);
}
catch(Exception e)
{
//out.println(e.toString());
}

// 在内存中创建图象
int width=w, height=h;
int flen = 0;
if(name != null && name.length() > 0)
{
flen = name.length();
}
if(flen > 3) flen = 3;
int fx[] = new int[flen];
int fy[] = new int[flen];
String names[] = new String[flen];
int fx0 = 45;
int fy0 = 174;
int fx2 = 47; //字的位置
int fy2 = 224;
switch(flen)
{
case 1:
fx[0] = fx0 + 1;
fy[0] = fy0 + 30;
if(name != null && name.length() == 1) names[0] = name.substring(0,1);
break;
case 2:
fx[0] = fx0;
fy[0] = fy0;
fx[1] = fx0;
fy[1] = fy0 + 50;
if(name != null && name.length() == 2)
{
names[0] = name.substring(0,1);
names[1] = name.substring(1,2);
}
break;
case 3:
fx[0] = fx0;
fy[0] = fy0;
fx[1] = fx0;
fy[1] = fy0 + 30;
fx[2] = fx0;
fy[2] = fy0 + 60;
if(name != null && name.length() == 3)
{
names[0] = name.substring(0,1);
names[1] = name.substring(1,2);
names[2] = name.substring(2,3);
}
break;
default:
flen = 0;
break;
}
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

// 获取图形上下文
Graphics g = image.getGraphics();
Graphics2D g2 = (Graphics2D)image.getGraphics();

if(img !=null) g.drawImage(img,0,0,null);

if(flen > 0)
{
//设定字体
g2.setColor(new Color(100,58,0));
g2.setFont(new Font("KaiTi_GB2312",Font.BOLD,24));
g2.rotate(-0.25,fx0 + 1,fy0);
for(int i = 0;i < flen; i++)
{
try
{
if(names.length > i)
{
//out.println(names[i]);
//g2.drawString(new String(str.getBytes("GB2312"),"ISO-8859-1"),fx[i],fy[i]);
g2.drawString(new String(names[i].getBytes("ISO-8859-1"),"GB2312"),fx[i],fy[i]);
}
}
catch(Exception e)
{
out.println(e.toString());
}
}
}
// 图象生效
g.dispose();

// 输出图象到页面
ImageIO.write(image, "JPEG", response.getOutputStream());
%>
回复 点赞
vongood 2004年12月26日
可以象楼上那样访问。
回复 点赞
ivyziran 2004年12月26日
啊,晕了,我也是第一次发贴,也找了半天,呵呵,后来看了下帮助就找到了。
你把左边导航打开,选中具体的栏目后,在页面的最上边菜单条就可以点提问了
回复 点赞
xunxun422 2004年12月26日
小弟我初来咋到,借老兄你的帖子问个问题啊,我在哪里可以发新帖子问问题啊??我找了N年都找不到'发表新帖子'啊,真内向啊!请有心人指点一二?是不是新注册的用户要一定时限才能发问题啊?
回复 点赞
发动态
发帖子
Java EE
创建于2007-09-28

3.7w+

社区成员

22.5w+

社区内容

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区公告
暂无公告