精华内容
下载资源
问答
  • 包中图片
    2021-03-14 04:26:39

    如下代码,使用getResourceAsStream返回jar中文件的InputStream流:

    Image img = null;

    try {

    MediaTracker m = new MediaTracker(this);

    InputStream is = getClass().getResourceAsStream("image.gif");

    //

    // if your image is in a subdir in the jar then

    // InputStream is = getClass().getResourceAsStream("img/image.gif");

    // for example

    //

    BufferedInputStream bis = new BufferedInputStream(is);

    // a buffer large enough for our image

    //

    // can be

    // byte[] byBuf = = new byte[is.available()];

    // is.read(byBuf); or something like that...

    byte[] byBuf = = new byte[10000];

    int byteRead = bis.read(byBuf,0,10000);

    img = Toolkit.getDefaultToolkit().createImage(byBuf);

    m.addImage(img, 0);

    m.waitForAll();

    }

    }

    catch(Exception e) {

    e.printStackTrace();

    }

    更多相关内容
  • Android动态加载外部jar包及jar包中图片等资源文件Android应用程序由Java开发,因此Java中许多实用的特性,在Android中也有体现。动态加载Class,也就是外部jar包,在Java中简单的方法就是在项目的Bulid Path中导入...

    Android动态加载外部jar包及jar包中图片等资源文件

    Android应用程序由Java开发,因此Java中许多实用的特性,在Android中也有体现。动态加载Class,也就是外部jar包,在Java中简单的方法就是在项目的Bulid Path中导入jar,然后就可以使用jar包中的Class文件,这些,都需要java虚拟机的支持。

    Android的虚拟机与java虚拟机有区别。所以在动态加载jar包上面有区别。简单来说就是android的虚拟机不能识别jar包,需要将jar包转换为可识别的dex文件(android系统可执行文件)。

    Android中动态加载jar包的类,使用DexClassLoader来实现。

    Jar包中可以打进android项目res文件夹下的资源文件,android中亦可以对jar包中的资源文件进行加载。

    Android中加载jar包中的如txt,png等文件,使用JarFile类进行。

    2.制作jar包,转换为dex文件

    使用面向接口编程:

    2.1写好功能接口与接口的实现。

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    0818b9ca8b590ca3270a3433284dd417.png

    2.2将接口打成IDynamic.jar,将接口实现打成Dynamic.jar

    0818b9ca8b590ca3270a3433284dd417.png 

    0818b9ca8b590ca3270a3433284dd417.png

    面向接口编程,调用jar包的项目导入接口的jar包,接口实现的jar包放在项目外部,用于调用。

    2.3将功能接口的实现类的jar包转为dex文件

    1)     将Dynamic.jar复制到adt-bundle-windows-x86-20131030\sdk\build-tools\android-4.4,将jar包转为android识别的dex文件。

    2)     进入cmd,cd到上面的目录,执行命令:

    dx  --dex --output  = Dynamic_temp.jar  Dynamic.jar

    Dynamic_temp.jar是要生成的dex包。

    注:jar包中可以将res中的资源打包进去。

    3.使用jar包,动态加载。

    1.      将接口实现类的jar包Dynamic_temp.jar导入到模拟器的sd卡上,为了方便,直接导入根目录下。

    2.      将接口IDynamic.jar导入需要调用的项目中。

    3.1动态加载jar包中的Class,例子是在activity中:

    //动态加载类的接口

    private IDynamic lib = null;

    // android可执行class加载器

    private DexClassLoader c1;

    //动态加载外部(sd卡中)jar包的路径

    privateString jarPath;

    // jar解压路径,jar包中的dex文件会被解压缩

    privateString jarOutputPath;

    jarPath = Environment.getExternalStorageDirectory()

    .toString() + File.separator + "dynamic_temp.jar";

    jarOutputPath = Environment.getExternalStorageDirectory()

    .toString() + File.separator + "ExtendJar";

    //定义DexClassLoader

    //第一个参数:是dex压缩文件的路径

    //第二个参数:是dex解压缩后存放的目录

    //第三个参数:是C/C++依赖的本地库文件目录,可以为null

    //第四个参数:是上一级的类加载器

    c1 = new DexClassLoader(jarPath, jarOutputPath, null, getClassLoader());

    try {

    Class> dynamic = c1

    .loadClass("com.dynamic.interfacesImpl.Dynamic");

    lib = (IDynamic) dynamic.newInstance();

    if (lib != null) {

    lib.init(MainActivity.this);

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    在按钮的点击事件中调用jar中的方法:

    public void onClick(View arg0) {

    lib.showToast();

    }

    0818b9ca8b590ca3270a3433284dd417.png

    3.2动态加载jar包中的资源:图片、文本等

    将jar包中打入资源文件,例子中是res/drawable-mdpi/ic_launcher.png,及jar自带的META-INF/MANIFEST.MF文件。

    3.2.1解析jar包中的文本文件:

    Button btn4 = (Button) findViewById(R.id.btn4);

    btn4.setOnClickListener(new View.OnClickListener() {

    public void onClick(View arg0) {

    JarFile jarfile;

    InputStream is;

    try {

    jarfile = new JarFile(jarPath);

    is = jarfile.getInputStream(jarfile

    .getEntry("META-INF/MANIFEST.MF"));

    StringBuffer out=new StringBuffer();

    byte[] b=new byte[4096];

    for (int n; (n = is.read(b)) != -1;) {

    out.append(new String(b, 0, n));

    }

    TextView txt = (TextView) MainActivity.this

    .findViewById(R.id.textView);

    txt.setText(out.toString());

    is.close();

    } catch (IOException e) {

    //TODOAuto-generated catch block

    e.printStackTrace();

    }

    }

    });

    将从jar包中读出的文本文件,以inputStream流的形式读出,再输出。

    3.2.2 解析jar包中的图片

    将jar包中的图片以inputStream流的形式读出,再将inputStream流转为bmp图片对象,进行使用。

    Button btn3 = (Button) findViewById(R.id.btn3);

    btn3.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View arg0) {

    //TODOAuto-generated method stub

    JarFile jarfile;

    InputStream is;

    try {

    jarfile = new JarFile(jarPath);

    is = jarfile.getInputStream(jarfile

    .getEntry("res/drawable-mdpi/ic_launcher.png"));

    /*

    *将inputStream流转为bmp对象

    */

    Bitmap bmp = BitmapFactory.decodeStream(is);

    ImageView img = (ImageView) MainActivity.this

    .findViewById(R.id.img);

    img.setImageBitmap(bmp);

    is.close();

    } catch (IOException e) {

    //TODOAuto-generated catch block

    e.printStackTrace();

    }

    }

    });

    效果图

    0818b9ca8b590ca3270a3433284dd417.png

    http://wenku.baidu.com/link?url=a_7Mz0z7EWH3JkCkqc4rFpivzkDsFVIyr-smsDqyoeAAJq4x_w4QOllzNoJp4OxjEnSmCVnGA-NAfkMdu1lWK6ahc7nI-RU3nlTOfATk58u

    展开全文
  • jar包中图片加载出错解决方案问题:图片加载报错解决方案:使用**InputStream**提升:这样写为什么可以?展示:这里展示下我做的jar包(一个简单的过场动画)源码:java代码及图片 如果你对eclipse中加载图片不太...

    如果你对eclipse中加载图片不太熟悉的话,恭喜你,看到了这篇文章。

    问题:图片加载报错

    这个问题其实很简单,因为jar包其实是一种压缩形式,你并不能通过File直接从中读到信息。

    解决方案:使用InputStream

            //创建马里奥图片的inputstream对象
            InputStream ma = this.getClass().getResourceAsStream("/mario_g.png");
            //创建路易吉图片的inputstream对象
            InputStream lu = this.getClass().getResourceAsStream("/luigi_g.png");       
            //使用ImageIO.read()方法直接读取成BufferedImage对象 
    		BufferedImage marioBufferedImage = ImageIO.read(ma);
    		BufferedImage luigiBufferedImage = ImageIO.read(lu);
    		//如果你需要的是Image对象的话,只需要强转一下就行了。这里使用BufferedImage因为他可以比较方便的改变图片的大小。
    		Image marioImage = (Image)marioBufferedImage;
    

    上面使用的路径,为src的相对路径。
    在这里插入图片描述

    提升:这样写为什么可以?

    我们这个this.getClass().getResourceAsStream显然是从.class文件所在目录中获取文件的,为什么我前面说只要写src的相对路径就行呢?

    首先,我们需要明白的是,eclipse在编译的时候,会将src目录下的文件和.java文件一并编译到bin目录下保持不变,而.java文件则被编译成了.class文件。

    这样你是不是明白了?咱们获取的的确不是src下的文件,但是bin下的确也有这个文件就是了。

    你现在是不是想着把图片放到bin目录下,是不是少放在src下一次,还要更精简一些呢?

    然而并不是,首先,你本次运行还是没问题的,因为你bin目录下的确有你放入的文件。但是,只要你修改了java代码,eclipse一重新编译class文件,哼哼,你src目录下没有的,bin目录下也就木大木大啦!而且你这样的话导出成jar包的时候里面会没有你的资源文件。。。

    那么这里再稍微讲下如何导出jar包吧,右键项目 -> Java -> JAR file -> Next -> 在 Select the export destination 下点 Browse.. 选一个路径 -> finish

    这样你就可以得到一个jar包了,里边只有编译好的class文件嘛,所以相对应的路径,就应该取class文件所在的路径咯,这也是你jar包文件取不到的原因。

    言归正传,你可能会想,取class文件所在路径,用this.getClass().getResource("/").getFile()不行吗?然后用得到的字符串,去新建一个File对象,也是在bin里取图片啊,为啥不行?

    这就要涉及到读取文件的方式了,InputStream读取方式,是将图片转换成流数据来读取,就好像是文件肚子里的蛔虫。而File的读取方式是先找到文件,再读取,就好像是侦探通过线索来找你。而导出成jar包侦探就找不到你了吗?还真找不到了!因为前面也说了,jar包是一种压缩文件的形式,他是一个文件,不是一个路径,就好像你藏在了一个人的梦里,而侦探又不是什么神仙,怎么可能从别人的梦里找到你?这个解答满意否?

    下面再顺便讲讲使用jar包吧,很简单,在项目下新建一个lib目录,然后把你生成的jar包拖进去,右键它,点Build Path -> Add To Build Path就行了,你就可以创建jar包里的类的对象来使用它的方法了。

    展示:这里展示下我做的jar包(一个简单的过场动画)

    在这里插入图片描述

    源码:java代码及图片

    这是创建jar包前的源码,创建jar包的时候可以把public class去掉。

    import java.awt.Container;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URISyntaxException;
    import javax.imageio.ImageIO;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    @SuppressWarnings("serial")
    public class GuoChangTest extends JFrame{
    	public GuoChangTest(String title) throws IOException, InterruptedException, URISyntaxException
        {
            JFrame jf = new JFrame(title);    
            Container conn = jf.getContentPane();    //得到窗口的容器
            DrawGuoChang guochang = new DrawGuoChang(790,580);
            conn.add(guochang);
            jf.setBounds(300,80,800,600); //设置窗口的属性 窗口位置以及窗口的大小
            jf.setVisible(true);//设置窗口可见
            jf.setDefaultCloseOperation(DISPOSE_ON_CLOSE); //设置关闭方式 如果不设置的话 似乎关闭窗口之后不会退出程序
            guochang.run();
        }
        
        public static void main(String[] args) throws IOException, InterruptedException, URISyntaxException {
            new GuoChangTest("过场动画测试");        //创建窗口
        }
    
    }
    
    @SuppressWarnings("serial")
    class DrawGuoChang extends JPanel{
    	
    	private int width;
    	private Image marioImage;
    	private Image luigiImage;
    	private int imgWidth;
    	private int imgHeight;
    	private int t;
    	
    	public DrawGuoChang(int width,int height) throws IOException, URISyntaxException {
    		this.width = width;
            InputStream ma = this.getClass().getResourceAsStream("/mario_g.png");
            InputStream lu = this.getClass().getResourceAsStream("/luigi_g.png");        
    		BufferedImage marioBufferedImage = ImageIO.read(ma);
    		BufferedImage luigiBufferedImage = ImageIO.read(lu);
    		imgHeight = height/6;
    		double scale = imgHeight/(double)marioBufferedImage.getHeight();
    		imgWidth = (int) (marioBufferedImage.getWidth()*scale);
    		this.marioImage = marioBufferedImage.getScaledInstance((int) imgWidth,  imgHeight, Image.SCALE_DEFAULT);
    		this.luigiImage = luigiBufferedImage.getScaledInstance((int) imgWidth,  imgHeight, Image.SCALE_DEFAULT);
    	}
    	
    	public void run() throws InterruptedException {
    		t=0;
    		while(true) {
    			t++;
    			Thread.sleep(20);
    			super.repaint();
    			if(t==-1) {
    				return;
    			}
    		}
    	}
    	
    	protected void paintComponent(Graphics g) {
    		int xm,xl=1;
    		for(int i=0;i<3;++i) {
    			if(t>=0) {
    				xm=-100-imgWidth+t*10;
    				xl=100+width-t*10;				
    			}else {
    				xm=-100-imgWidth;
    				xl=100+width;								
    			}
    			g.drawImage(marioImage, xm, imgHeight*i*2, null);
    			g.drawImage(luigiImage, xl, imgHeight*i*2+imgHeight, null);
    		}
    		if(xl<=0) {
    			t=-40;
    		}
    	}
    	
    }
    
    

    图片是我自己网上找的图片然后ps做的。
    在这里插入图片描述
    mario_g.png

    在这里插入图片描述
    luigi_g.png

    展开全文
  • 引用依赖包时无法加载图片等资源

    前言

    上文中讲到将组件A进行打包发布了,但是在项目B中进行使用时发现图片加载不出来,查看图片的路径发现了问题所在,下面将详细分析图片加载不出来的原因和解决方案。

    组件A中图片路径

    在组件A中使用到的图片会被打包进build文件夹下的img文件夹中
    在这里插入图片描述

    项目B中使用

    但是在项目B中使用时发现图片无法加载,查看路径发现路径错乱,根本加载不到资源
    在这里插入图片描述

    解决方案

    于是想到在项目B中使用时,由于引用的是组件A的打包后的包,就是js文件,所以引用图片的路径变为在js路径下,但是项目B打包后包的js文件夹下根本没有此路径,所以无法加载到这个图片。根据此问题可提供以下解决方案:

    1. 图片不大时,可将图片转为base64形式使用。但是在图片很多时可能会影响性能,图片很大时也可能无法转化。
    2. 将图片资源放在线上服务器上,引用图片路径时使用绝对路径。
    3. 将图片资源放在每个项目的静态文件夹中,每个项目单独维护图片资源。
    4. 在引用组件A时,也可以再引入一下图片资源,这样就可以访问到图片路径了,此方案为娱乐方案。

    前三种方案在网上都可以搜到,使用也很简单,下面讲一下方案4,此方案仅供娱乐。

    娱乐方案

    在项目B中的node_modules中可以看到能拿到组件A中的图片资源,此时可以把图片文件夹复制到项目B的静态文件夹中中,通过copy-webpack-plugin插件可以打包到项目B包中,项目B打包后即可正常访问图片。这种方法和方案3类似了。
    在这里插入图片描述
    在这里插入图片描述
    还有一种方法,就是直接引入图片,也可以通过打包将图片资源放到正确位置。需要配置一下vue.config.js

    import ‘…/node_modules/zy-testtt/build/img/2003472.9edbef.jpg’

    const path = require('path')
    module.exports = {
      chainWebpack: config => {
        // 为啥是images呢?可以通过审查项目 vue inspect > output.js输出到文件中,搜image就懂了
        const urlLoader = config.module.rule('images')
        // 清除已有的所有 loader,一定要进行的操作
        // 如果你不这样做,接下来的 loader 会附加在该规则现有的 loader 之后
        // 具体原理可自行查看webpack官网
        urlLoader.uses.clear()
        urlLoader
        .test(/\.(png|jpe?g|gif|svg)(\?.*)?$/)
        .use('url-loader')
        .loader('url-loader')
        .options( {
          limit: 1024*1, // 1k
          name:'js/img/[name].[ext]',
          fallback: 'file-loader',  // 当超过1024byte时,会回退使用file-loader
          context: path.resolve(__dirname,'./src'),
          publicPath: '/' //采用根路径
        })
      },
    }
    

    在这里插入图片描述
    vue.config.js中的配置从网上某个博客中拿过来的,忘了是哪个博客了。
    从上图可看到图片可以正常加载了,ok,娱乐结束,认真了,有好的方案的话欢迎留言,想学习!

    展开全文
  •  ueditor编辑器 在tomcat下运行与war运行时,tomcat下的图片上传时会自动获取tomcat下的文件夹目录,将上传的图片写入文件夹。  我们的程序是war包运行的,图片无法写入war包,只能把图片放在外边,为解决此...
  • init初始化没问题,但是新建了一个drawable包将图片放进去以后就显示报错不能安装 解决 :包中图片有个有问题,等老师上课说,先将需要用的图标放进去
  • 加载AB包,之后,由于图片全部在一个AB包中,将AB包卸载就会使得 从AB包加载的图片 失效,为空。 先确保 要打包 的图片的Read/Write Enable为 勾选状态。 用代码批量处理 当前项目工程 中的 所有 .png图片 ,...
  • jar包中的资源读取不到,真心难过,后来发现可以通过流的方式把资源读取出来(包括.class本身) //读取jar包中的资源,但是读到的是InputStream InputStream is=this.getClass().getResourceAsStream("/Plugin/...
  • 程序中要显示图片,而且还要使用MySQL的JDBC Driver类,将mysql-connector-java-5.1.8-bin.jar和需要的图片文件夹pic加入工程中,但图片不能正常显示,并 且数据库连接失败。 先解决图片的问题。图片的显示有两种...
  • 如何读取jar包中图片

    千次阅读 2021-03-14 02:05:58
    如何读取jar包中图片?‍一、首先,在eclipse中正常读取图片(用swing图形界面来测试)。‍1、目录结构如下图所示: test为工程名,测试类为photo.ReadTest,图片文件为img\test.png。2、代码如下所示:packagephoto...
  • 从bag包中提取图片和点云数据

    千次阅读 2020-10-18 13:49:25
    之前录了一些激光雷达点云数据以及双目相机的图像数据,需要从bag包中提取出来,以便后续使用。 bag中提取点云 bag中提取点云数据 bag中提取图片 查看bag信息 rosbag info yourname.bag 可以看到如下图bag包信息: ...
  • 怎么能修改Jar包中的内容

    千次阅读 2020-10-12 12:23:48
    在做(或修改别人的)项目的时候,可能遇到要修改调用的的jar包内的类属性或方法的问题。在eclipse或是其他的IDE中是无法直接修改的,所以需要一个解压jar-->修改文件-->编译-->打包成jar文件的过程,下面...
  • rosbag解包,保存图片

    千次阅读 2020-11-23 21:51:21
    新建一个文件夹(建立result文件夹),图片会保存在该文件夹下,在该文件下运行命令: (这里保存的是jpg格式图片) rosrun image_view extract_images _sec_per_frame:=0.01 image:=/camera/color/image_raw 根据...
  • 原因:由于存放的图片的路径可能是在src外面的。这样子,打包成jar包之后,类中访问的路径是需要到src下找资源。这时候就出现找不到图片的情况。 如:       这里提供几种解决方案...
  • jar cvf *.jar *.class *.jpg打好jar包后 1. 若要jar包可打开执行,则改动jar... 对于加载图片,见:转载(1)你将所有资源打包为andy.jar,你的类位于一个包中:package andycpp;你的图片资源全部放在images文件夹中
  • 读取jar包中图片,文本, 文本会写到控制台,图片会输出到F:盘中
  • 一:同步加载其中一个资源 T objectFromBundle=assetBundle.LoadAsset<T>(string assetName) 二:同步加载所有资源 T[]objectsFromBundle=assetBundle.LoadAllAssets<T>...三:异步加载其中一个资源 ...
  • 从bag包中提取图片和点云数据为pcd格式点云文件1 开始提取bag包之前的准备工作2 从bag包中提取图片和点云数据 首先说明一下我运行的系统环境: python2 Ubuntu18.04 ROS melodic 1 开始提取bag包之前的准备工作 ...
  • public class Activator { ... public ImageDescriptor getImage(String path){ return ResourceLocator.imageDescriptorFromBundle(PLUGIN_ID,path).orElse(null); } public static void main(String[] args) ...
  •  为解决此问题,在AppActivity的基类Cocos2dxActivity的init时,显示一张背景图片即可。  由于Cocos2dxActivity位于classes.jar中,所以无法通过R.drawable.xxx来访问项目res/drawable中的资源。为解决此问题,...
  • cocos2d图片资源解密

    千次阅读 2019-08-27 18:18:34
    根据经验和查找资料,cocos2dx的图片资源加载, 是在Image::initWithImageData(const unsigned char * data, ssize_t dataLen)函数;打开libcocos2djs.so,搜索这个函数可以看到解密就在这个地方 可以看到,通过...
  • 这句话的意思是 只要你把资源文件放到jar包中的 /META-INFO/resources目录下,启动项目时,这个目录下的资源文件是可以直接访问的。 这里可能会有这几个疑问: 【1】问:/META-INF/resources 目录要在哪里创建? 答...
  • 读取jar包中图片,,如下代码,使用getRe如下代码,使用getResourceAsStream返回jar中文件的InputStream流:Image img = null;try { MediaTracker m = new MediaTracker(this); InputStream is = getClass()....
  • 我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等)。在单独运行的时候这些简单的处理当然不会有问题。但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了。这段代码...
  • 可以将ros包中的颜色图和深度图读取出来,并保存到对应文件夹下。 使用时仅需要修改对应话题和路径即可。
  • cocos2dx 图片资源加密解密

    千次阅读 2019-01-25 00:43:13
    下面就和大家来共享一下cocos2dx 图片资源加密解密的方法,如果对这个方法有疑问或者完善可以到社区里面发帖,来和大家一起进行交流和学习,社区里也会不断的来更新这方面的内容,和大家一起来交流做使用过程中遇到...
  • 构建Android布局,图片资源到jar包中; 做成封装带界面的罐包SDK(如:游戏sdk); 执照 Copyright (C) 2015 seven456@gmail.com Licensed under the Apache License, Version 2.0 (the "License"); you may not use...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,748
精华内容 22,699
关键字:

包中图片