怎样在java里用URL引入图片引入图片 20

如题,网上查了很久都找不到答案。我是要建一个JFrame窗口,然后在里面的JLabel处引入图片,已经在src下捡了个子目录images来放图片的,但是不知道怎样引入。。... 如题,网上查了很久都找不到答案。
我是要建一个JFrame窗口,然后在里面的JLabel处引入图片,已经在src下捡了个子目录images来放图片的,但是不知道怎样引入。。求高手教一教。。如果可以的话顺便教教我怎样用相对路径引用
展开
 我来答
pieryon
2015-07-18 · 知道合伙人数码行家
pieryon
知道合伙人数码行家
采纳数:14411 获赞数:166864
获取软件设计师高级职称 万达金融最佳创新奖

向TA提问 私信TA
展开全部

URL对象中前而几个方法都非常容易理解,而该对象提供的openStream()可以读取该 URL资源的InputStream,通过该方法可以非常方便地读取远程资源。

下面的程序示范如何通过URL类读取远程资源:

1)只显示网络图片


1)只显示网络图片


引用图片处理的java类:

package dujun.king.urlgetimage;  

  

import java.io.InputStream;  

import java.net.URL;  

  

import android.app.Activity;  

import android.graphics.Bitmap;  

import android.graphics.BitmapFactory;  

import android.os.Bundle;  

import android.os.Handler;  

import android.os.Message;  

import android.view.Menu;  

import android.view.MenuItem;  

import android.widget.ImageView;  

  

  

public class MainActivity extends Activity {  

  

    Bitmap bitmap;  

    ImageView imageview;  

      

    Handler handler=new Handler(){  

        @Override  

        public void handleMessage(Message msg) {  

            if (msg.what==0x9527) {  

                //显示从网上下载的图片  

                imageview.setImageBitmap(bitmap);  

            }  

        }            

    };  

      

    @Override  

    protected void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.activity_main);  

        imageview=(ImageView)findViewById(R.id.imageView1);       

        //创建并启动一个新线程用于从网络上下载图片  

        new Thread(){  

            @Override  

            public void run() {  

                try {  

                    //创建一个url对象  

                    URL url=new URL("http://www.baidu.com/img/bdlogo.png");  

                    //打开URL对应的资源输入流  

                    InputStream is= url.openStream();  

                    //从InputStream流中解析出图片  

                    bitmap = BitmapFactory.decodeStream(is);  

                //  imageview.setImageBitmap(bitmap);   

                    //发送消息,通知UI组件显示图片  

                    handler.sendEmptyMessage(0x9527);  

                    //关闭输入流  

                    is.close();  

                } catch (Exception e) {  

                    e.printStackTrace();  

                }  

            }            

        }.start();  

      

    }  

  

  

    @Override  

    public boolean onCreateOptionsMenu(Menu menu) {  

        // Inflate the menu; this adds items to the action bar if it is present.  

        getMenuInflater().inflate(R.menu.main, menu);  

        return true;  

    }  

  

    @Override  

    public boolean onOptionsItemSelected(MenuItem item) {  

        // Handle action bar item clicks here. The action bar will  

        // automatically handle clicks on the Home/Up button, so long  

        // as you specify a parent activity in AndroidManifest.xml.  

        int id = item.getItemId();  

        if (id == R.id.action_settings) {  

            return true;  

        }  

        return super.onOptionsItemSelected(item);  

    }  

}  

zhaotao_king
2013-04-12 · TA获得超过2455个赞
知道大有可为答主
回答量:863
采纳率:0%
帮助的人:1141万
展开全部

查看API 可通过  JLabel构造函数,也可使用setIcon(Icon icon) 函数,下面给出一个列子!

看楼主提问,主要想知道路径怎么得来!

可使用


this.getClass().getResource("/")获取的是class文件编译后放置的绝对路径。

this.getClass().getResource("/images/a.png");编译地址/images/a.png (详见代码20-21)


这里图片是放到src --  images -- a.png


有问题再追问,good luck!

import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class MyImages extends JFrame {
/**
* @Fields serialVersionUID : Description
*/
private static final long serialVersionUID = 1060195358054863848L;
/**
* 创建一个新的实例 MyImages.
*/
public MyImages() {
// TODO Auto-generated constructor stub
Container c = this.getContentPane();
c.setLayout(new BorderLayout());

Icon icon = new ImageIcon(this.getClass().getResource("/images/a.png"));
JLabel label = new JLabel("aaa", icon, JLabel.LEFT);

c.add(label, BorderLayout.CENTER);

this.setSize(500, 500);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args) {
new MyImages();
}
}
更多追问追答
追问
你太专业了,好厉害的解答,但是我直接调用了你的代码,
中间我只是把图片名换成了自己这边的:q(1).gif
调用的就是SRC包子文件夹里的q(1).gif。
不知道是怎么回事,运行时却提示错误:
Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.(ImageIcon.java:205)
at com.Test.Test.(Test.java:21)
at com.Test.Test.main(Test.java:32)
追答
找不到资源,空指针一场!
this.getClass().getResource("/images/a.png");
这个地址是
src
-- images
--a.png
假如你的是
src
--resource
--img
--q(1).gif
你就这样写this.getClass().getResource("/resource/img/q(1).gif");
你看你src下的文件夹叫什么名字,将images替换成你自己的就行了!
如直接放在src下,去掉images就可以了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
甲基环乙烷钛粉
2013-04-13
知道答主
回答量:14
采纳率:100%
帮助的人:7.6万
展开全部
读取图片可以有以下两种方法:
①:ImageIO.read(new File("这里可以写目录,比如您提到的src/images/某张图片名"));
②:new ImageIcon("目录").getImage();
这两个方法都返回一个图片对象。可以用一个Image对象接收一下。

相对路径是指您所运行的程序的包 所在的文件夹开始的路径。
一般来说,上面两种读取方法读取时,是从项目的目录下开始找文件的。
所以,您把图片放在src下的images包中,正确的读取方法应该是:
Image img=ImageIO.read(new File("src/images/图片名"));或者
Image img=new ImageIcon("src/images/图片名").getImage();
得到这样一个Image对象后,就可以使用了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小屠户
2013-04-12 · TA获得超过383个赞
知道小有建树答主
回答量:329
采纳率:100%
帮助的人:224万
展开全部
ImageIcon img = new ImageIcon("c://a.jpg"); //添加图片
JLabel background = new JLabel(img);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhangao96
2013-04-12
知道答主
回答量:10
采纳率:0%
帮助的人:1.1万
展开全部
url(人输入未见所在地址)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式