首页 文章 精选 留言 我的

精选列表

搜索[网站开发],共10000篇文章
优秀的个人博客,低调大师

Java企业微信开发_12_异常:java.lang.OutOfMemoryError: Java heap space

一、异常现象 今天客户迁到正式环境,在做企业微信 接收消息服务器配置 时,出现如下异常: java.lang.OutOfMemoryError: Java heap space 二、异常原因 JAVA的堆栈设置太小 三、解决方法 两种方法: 1、设置环境变量 解决方法:手动设置Heap size 修改TOMCAT_HOME/bin/catalina.sh set JAVA_OPTS= -Xms32m -Xmx512m 可以根据自己机器的内存进行更改。 2、java -Xms32m -Xmx800m className 就是在执行JAVA类文件时加上这个参数,其中className是需要执行的确类名。(包括包名) 这个解决问题了。而且执行的速度比没有设置的时候快很多。 如果在测试的时候可能会用Eclispe 这时候就需要在Eclipse ->run -arguments 中的VM arguments 中输入-Xms32m -Xmx800m这个参数就可以了。 后来在Eclilpse中修改了启动参数,在VM arguments 加入了-Xms32m -Xmx800m,问题解决。 四、参考资料 1.java.lang.OutOfMemoryError: Java heap space解决方法 (有问题咨询加微信)

优秀的个人博客,低调大师

iOS 开发商品详情页中的banner中点击查看图片

本文出自code4app,原文地址:http://www.code4app.com/blog-928210-1694.html 轮翻播放与查看是分开的,轮翻是是用 开源的SDCycleScrollView 这里是给出的是查看的: //// FullScreenShowImageView.swift// joopic//// Created by jianxiong li on 16/9/27.// Copyright © 2016年 joobot. All rights reserved.//import Foundation import UIKit//图片轮播组件代理协议protocol FullScreenShowImageViewDelegate{ //获取数据源 func galleryDataSource()->[String] //获取内部scrollerView的宽高尺寸 func galleryScrollerViewSize()->CGSize func hiddenForCliked(index:Int) }//图片轮播组件控制器class FullScreenShowImageView: UIView,UIScrollViewDelegate{ //代理对象 var delegate : FullScreenShowImageViewDelegate! //屏幕宽度 let kScreenWidth = BWidth //当前展示的图片索引 var currentIndex : Int = 0 //数据源 var dataSource : [String]? //用于轮播的左中右三个image(不管几张图片都是这三个imageView交替使用) var leftImageView , middleImageView , rightImageView : UIImageView? //放置imageView的滚动视图 var scrollerView : UIScrollView? //scrollView的宽和高 var scrollerViewWidth : CGFloat? var scrollerViewHeight : CGFloat? //页控制器(小圆点) var pageControl : UIPageControl? //加载指示符(用来当iamgeView还没将图片显示出来时,显示的图片) var placeholderImage:UIImage! //自动滚动计时器 var autoScrollTimer:NSTimer? init(frame: CGRect,delegate:FullScreenShowImageViewDelegate) { super.init(frame: frame) self.delegate = delegate praperaUI() } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } func praperaUI() { //获取并设置scrollerView尺寸 let size : CGSize = self.delegate.galleryScrollerViewSize() self.scrollerViewWidth = size.width self.scrollerViewHeight = size.height //获取数据 self.dataSource = self.delegate.galleryDataSource() //设置scrollerView self.configureScrollerView() //设置加载指示图片 self.configurePlaceholder() //设置imageView self.configureImageView() //设置页控制器 self.configurePageController() //设置自动滚动计时器 //self.configureAutoScrollTimer() self.backgroundColor = UIColor.blackColor() self.addTapAction() } func addTapAction(){ //添加组件的点击事件 let tap = UITapGestureRecognizer(target: self, action: #selector(FullScreenShowImageView.handleTapAction(_:))) self.addGestureRecognizer(tap) } //点击事件响应 func handleTapAction(tap:UITapGestureRecognizer)->Void{ //获取图片索引值 self.delegate.hiddenForCliked(self.currentIndex) self.dismissViewAnimate() } func presentViewAnimate() { let fr = self.middleImageView?.frame self.middleImageView?.frame = CGRect(x: fr!.origin.x, y: 22, width: fr!.width, height: fr!.height) UIView.animateWithDuration(10, animations: { self.middleImageView?.frame = fr! }) { (_) in } } func dismissViewAnimate() { let fr = self.middleImageView?.frame self.middleImageView?.frame = CGRect(x: fr!.origin.x, y: fr!.origin.y - StatusAndNavHeight, width: fr!.width, height: fr!.height) UIView.animateWithDuration(10, animations: { self.middleImageView?.frame = CGRect(x: fr!.origin.x , y: -42, width: fr!.width, height: fr!.height) }) { (_) in self.hidden = true self.middleImageView?.frame = fr! } } //设置scrollerView func configureScrollerView(){ self.scrollerView = UIScrollView(frame: CGRect(x: 0,y: 0, width: self.scrollerViewWidth!, height: BHeight)) self.scrollerView?.backgroundColor = UIColor.blackColor() self.scrollerView?.delegate = self self.scrollerView?.contentSize = CGSize(width: self.scrollerViewWidth! * 3, height: BHeight) //滚动视图内容区域向左偏移一个view的宽度 self.scrollerView?.contentOffset = CGPoint(x: self.scrollerViewWidth!, y: 0) self.scrollerView?.pagingEnabled = true self.scrollerView?.bounces = false self.addSubview(self.scrollerView!) } //设置加载指示图片 func configurePlaceholder(){ //这里我使用ImageHelper将文字转换成图片,作为加载指示符 let font = UIFont.systemFontOfSize(17)// UIFont.systemFont(ofSize: 17.0, weight: UIFontWeightMedium) let size = CGSize(width: self.scrollerViewWidth!, height: self.scrollerViewHeight!) placeholderImage = UIImage(named: "图片加载中...") } //设置imageView func configureImageView(){ self.leftImageView = UIImageView(frame: CGRect(x: 0, y: (BHeight-scrollerViewHeight!)/2, width: self.scrollerViewWidth!, height: self.scrollerViewHeight!)) self.middleImageView = UIImageView(frame: CGRect(x: self.scrollerViewWidth!, y: (BHeight-scrollerViewHeight!)/2, width: self.scrollerViewWidth!, height: self.scrollerViewHeight! )); self.rightImageView = UIImageView(frame: CGRect(x: 2*self.scrollerViewWidth!, y: (BHeight-scrollerViewHeight!)/2, width: self.scrollerViewWidth!, height: self.scrollerViewHeight!)); self.scrollerView?.showsHorizontalScrollIndicator = false self.leftImageView?.contentMode = UIViewContentMode.ScaleAspectFit self.middleImageView?.contentMode = UIViewContentMode.ScaleAspectFit self.rightImageView?.contentMode = UIViewContentMode.ScaleAspectFit //设置初始时左中右三个imageView的图片(分别时数据源中最后一张,第一张,第二张图片) if(self.dataSource?.count != 0){ resetImageViewSource() } self.scrollerView?.addSubview(self.leftImageView!) self.scrollerView?.addSubview(self.middleImageView!) self.scrollerView?.addSubview(self.rightImageView!) } //设置页控制器 func configurePageController() { self.pageControl = UIPageControl(frame: CGRect(x: kScreenWidth/2-60, y: BHeight - 30, width: 120, height: 20)) self.pageControl?.numberOfPages = (self.dataSource?.count)! self.pageControl?.userInteractionEnabled = false self.addSubview(self.pageControl!) } //设置自动滚动计时器 func configureAutoScrollTimer() { //设置一个定时器,每三秒钟滚动一次 autoScrollTimer = NSTimer.scheduledTimerWithTimeInterval(3, target: self, selector: #selector(SliderGalleryController.letItScroll), userInfo: nil, repeats: true) } //计时器时间一到,滚动一张图片 func letItScroll(){ let offset = CGPoint(x: 2*scrollerViewWidth!, y: 0) self.scrollerView?.setContentOffset(offset, animated: true) } //每当滚动后重新设置各个imageView的图片 func resetImageViewSource() { //当前显示的是第一张图片 if self.currentIndex == 0 { self.leftImageView?.sd_setImageWithURL(NSURL(string: self.dataSource!.last!)) self.middleImageView?.sd_setImageWithURL(NSURL(string: self.dataSource!.first!)) let rightImageIndex = (self.dataSource?.count)!>1 ? 1 : 0 //保护 self.rightImageView?.sd_setImageWithURL(NSURL(string: self.dataSource![rightImageIndex])) } //当前显示的是最后一张图片 else if self.currentIndex == (self.dataSource?.count)! - 1 { self.leftImageView?.sd_setImageWithURL(NSURL(string:self.dataSource![self.currentIndex-1])) self.middleImageView?.sd_setImageWithURL(NSURL(string: self.dataSource!.last!)) self.rightImageView?.sd_setImageWithURL(NSURL(string: self.dataSource!.first!)) } //其他情况 else{ self.leftImageView?.sd_setImageWithURL(NSURL(string:self.dataSource![self.currentIndex-1])) self.middleImageView?.sd_setImageWithURL(NSURL(string: self.dataSource![self.currentIndex])) self.rightImageView?.sd_setImageWithURL(NSURL(string: self.dataSource![self.currentIndex+1])) } //设置页控制器当前页码 self.pageControl?.currentPage = self.currentIndex } //scrollView滚动完毕后触发 func scrollViewDidScroll(scrollView: UIScrollView) { //获取当前偏移量 let offset = scrollView.contentOffset.x if(self.dataSource?.count != 0){ //如果向左滑动(显示下一张) if(offset >= self.scrollerViewWidth!*2){ //还原偏移量 scrollView.contentOffset = CGPoint(x: self.scrollerViewWidth!, y: 0) //视图索引+1 self.currentIndex = self.currentIndex + 1 if self.currentIndex == self.dataSource?.count { self.currentIndex = 0 } } //如果向右滑动(显示上一张) if(offset <= 0){ //还原偏移量 scrollView.contentOffset = CGPoint(x: self.scrollerViewWidth!, y: 0) //视图索引-1 self.currentIndex = self.currentIndex - 1 if self.currentIndex == -1 { self.currentIndex = (self.dataSource?.count)! - 1 } } //重新设置各个imageView的图片 resetImageViewSource() } } //手动拖拽滚动开始 func scrollViewWillBeginDragging(scrollView: UIScrollView) { //使自动滚动计时器失效(防止用户手动移动图片的时候这边也在自动滚动) //autoScrollTimer?.invalidate() } //手动拖拽滚动结束 func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) { //重新启动自动滚动计时器 //configureAutoScrollTimer() } } 如何使用: var sliderGallery : FullScreenShowImageView! var bannerCurrentIndex:Int = 0 //图片轮播组件协议方法:获取内部scrollView尺寸 func galleryScrollerViewSize() -> CGSize { return CGSize(width: BWidth, height: BHeight/2) } //图片轮播组件协议方法:获取数据集合 func galleryDataSource() -> [String] { return self.bannerView.imageURLStringsGroup as! [String] } //点击事件响应 func hiddenForCliked(index:Int){ if(bannerCurrentIndex != index){ self.bannerView.scrollToIndex(Int32(index)) } self.navigationController?.setNavigationBarHidden(false, animated: false) } func showImageGallery(index:Int){ //初始化图片轮播组件 if(sliderGallery == nil){ sliderGallery = FullScreenShowImageView(frame: CGRect(x: 0, y: 0, width: BWidth, height: BHeight),delegate:self) sliderGallery.currentIndex = index sliderGallery.resetImageViewSource() //将图片轮播组件添加到当前视图 self.view.addSubview(sliderGallery) }else{ sliderGallery.currentIndex = index sliderGallery.resetImageViewSource() sliderGallery.hidden = false } self.sliderGallery.presentViewAnimate() self.navigationController?.setNavigationBarHidden(true, animated: false) } //pragma -- SDCycleScrollViewDelegate func cycleScrollView(cycleScrollView: SDCycleScrollView!, didSelectItemAtIndex index: Int) { print("--------index:(index)") bannerCurrentIndex = index self.showImageGallery(index) }

优秀的个人博客,低调大师

国内首个深度学习开发SDK发布:深鉴科技对标英伟达TensorRT

本文来自AI新媒体量子位(QbitAI) AI芯片厂商开始意识到,AI芯片的计算性能再好,失去完备的软件包工具链的支持,也将丧失优势、举步维艰。 此种情况下,抢滩软件生态至关重要。 芯片业巨头英伟达率先推出深度学习软件包TensorRT。它相对简单易用,在深度学习算法推理阶段能将GPU的计算能力更大程度释放出来。得益于软件包的助力,GPU的应用范围从图像视频领域扩展到金融行业,最后扩展到计算需求量大的AI、深度学习领域。 如果说英伟达的GPU是个性能强大的火箭,那么TensorRT就是送它到深度学习的助推器,软件包对AI芯片的重要性不言而喻。 成立一年半的深鉴科技开始也没想到,自主研发的DNNDK一不小心就对标了英伟达的TensorRT。 这套面向AI异构计算平台DPU(Deep-learning Processor Unit,深度学习处理器

优秀的个人博客,低调大师

张高兴的 Xamarin.Forms 开发笔记:Android 快捷方式 Shortcut 应用

一、Shortcut 简介 Shortcut 是 Android 7.1 (API Level 25) 的新特性,类似于苹果的 3D Touch ,但并不是压力感应,只是一种长按菜单。Shortcut 是受启动器限制的,也就是说国内大厂的定制系统大多数是不支持的,那些所谓的可以 pin 在桌面上的应用功能的快捷启动图标本质上就是 Shortcut 。 二、Shortcut 在 Xamarin.Forms 中的实现分析 本文讨论的是动态 Shortcut 实现。 实现方式无非两种思路,一种 Native to Forms ,另一种 Forms to Native 。博主最开始考虑的是 Forms to Native ,但没成功。在设置 ShortcutInfo 时需要一个 Intent ,其中一个构造函数为 public Intent(Context packageContext, Type type); 看着很容易,只要传入一个 Content 以及 把对应的页面 typeof 一下即可,但会抛出异常。原因是传入的 Forms Page 类并不是 Java 的原生类型。查阅 Xamarin.Android 的相关文档发现,这个 Type 是必须继承 Activity 类的。那么,所有的 Forms 页面均不可传入,Forms to Native 这条路也就不能走了。 Native to Forms 呢? 既然是需要依赖 Activity 的,那就通过新建一个 Android Activity 去调用 Forms 页面。 三、代码实现 下面新建一个空的 Cross-Platform 项目 ShortcutDemo ,使用 Shared Project 共享代码。(GitHub:https://github.com/ZhangGaoxing/xamarin-forms-demo/tree/master/ShortcutDemo) 修改 Shared Project 添加两个 ContentPage 用作测试。 修改 Xamarin.Android 添加两个活动,ShortcutContainerActivity.cs 与 FormsActivity.cs 。 ShortcutContainerActivity.cs ShortcutContainerActivity.cs 用来作为展示 Forms 页面的跳板,因此将其继承的 Activity 改成 global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity 。同时把 OnCreate 的代码改成如下所示 protected override void OnCreate(Bundle savedInstanceState) { TabLayoutResource = Resource.Layout.Tabbar; ToolbarResource = Resource.Layout.Toolbar; base.OnCreate(savedInstanceState); global::Xamarin.Forms.Forms.Init(this, savedInstanceState); Intent intent = Intent; // 获取传进来的页面名称 string pageName = intent.GetStringExtra("PageName"); var app = new App(); // 设置显示的页面 switch (pageName) { case "Page1": app.MainPage = new ShortcutDemo.Views.Page1(); break; case "Page2": app.MainPage = new ShortcutDemo.Views.Page2(); break; default: break; } LoadApplication(app); } 要注意的是,顶部的 Activity 特性标签要改动,除了 MainLauncher 要改为 false 以外,其他的全部要和 MainActivity.cs 里的一样,不然会抛出异常,可能是主题不统一的原因。 [Activity(Label = "ShortcutDemo", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = false, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] FormsActivity.cs FormsActivity.cs 作为正常启动应用的活动,只是将其从 MainActivity.cs 中剥离开来。代码如下: [Activity(Label = "ShortcutDemo", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = false, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] public class FormsActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity { protected override void OnCreate(Bundle savedInstanceState) { TabLayoutResource = Resource.Layout.Tabbar; ToolbarResource = Resource.Layout.Toolbar; base.OnCreate(savedInstanceState); global::Xamarin.Forms.Forms.Init(this, savedInstanceState); LoadApplication(new App()); } } MainActivity.cs MainActivity.cs 作为应用程序的入口,由于 Forms 的初始化以及加载已被剥离至 FormsActivity.cs 中,可将 MainActivity.cs 的继承改为 Activity 类。 在其中添加一个 SetShortcut() 方法用于设置 Shortcut 。首先添加一个 List 用于存放 ShortcutInfo,以备最后动态设置 Shortcut 作为参数传入。 List<ShortcutInfo> shortcutInfoList = new List<ShortcutInfo>(); 接下来实例化一个 Intent 。其中 SetClass 将跳板活动 ShortcutContainerActivity 传入;SetAction 是必须设置的,要不然报错都不知道怎么回事;PutExtra 用于向下一个活动传递参数,我们这里传入的名称用于在跳板活动里设置 MainPage 。 Intent page1 = new Intent(); page1.SetClass(this, typeof(ShortcutContainerActivity)); page1.SetAction(Intent.ActionMain); page1.PutExtra("PageName", "Page1"); 下面实例化 ShortcutInfo 。SetRank 为设置排序序号,最多显示5个 Shortcut ,也就是 0-4 ;SetIcon 为设置图标;SetShortLabel 与 SetLongLabel 则是设置长名称与段名称;SetIntent 则把上一步实例化的 Intent 传入;最后将其加入 List 。 ShortcutInfo page1Info = new ShortcutInfo.Builder(this, "Page1") .SetRank(0) .SetIcon(Icon.CreateWithResource(this, Resource.Drawable.Page1)) .SetShortLabel("Page1") .SetLongLabel("Page1") .SetIntent(page1) .Build(); shortcutInfoList.Add(page1Info); 最后获取 ShortcutManager 进行动态设置 Shortcut ShortcutManager shortcutManager = (ShortcutManager)GetSystemService(Context.ShortcutService); shortcutManager.SetDynamicShortcuts(shortcutInfoList); 因此全部的 MainActivity.cs 的代码如下: [Activity(Label = "ShortcutDemo", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] public class MainActivity : Activity { protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetShortcut(); StartActivity(typeof(FormsActivity)); } private void SetShortcut() { List<ShortcutInfo> shortcutInfoList = new List<ShortcutInfo>(); Intent page1 = new Intent(); page1.SetClass(this, typeof(ShortcutContainerActivity)); page1.SetAction(Intent.ActionMain); page1.PutExtra("PageName", "Page1"); ShortcutInfo page1Info = new ShortcutInfo.Builder(this, "Page1") .SetRank(0) .SetIcon(Icon.CreateWithResource(this, Resource.Drawable.Page1)) .SetShortLabel("Page1") .SetLongLabel("Page1") .SetIntent(page1) .Build(); shortcutInfoList.Add(page1Info); Intent page2 = new Intent(); page2.SetClass(this, typeof(ShortcutContainerActivity)); page2.SetAction(Intent.ActionMain); page2.PutExtra("PageName", "Page2"); ShortcutInfo page2 = new ShortcutInfo.Builder(this, "Page2") .SetRank(1) .SetIcon(Icon.CreateWithResource(this, Resource.Drawable.Page2)) .SetShortLabel("Page2") .SetLongLabel("Page2") .SetIntent(page2) .Build(); shortcutInfoList.Add(page2); ShortcutManager shortcutManager = (ShortcutManager)GetSystemService(Context.ShortcutService); shortcutManager.SetDynamicShortcuts(shortcutInfoList); } } 四、效果图

优秀的个人博客,低调大师

Tech Insight携阿里云Link物联网平台助力实现“IoT全栈开发

12月19日上午9点,Tech Insight·北京峰会,在2017北京云栖大会国家会议中心准时拉开帷幕。作为年内压轴技术论坛,吸引了大量技术决策者,和一线的工程师、运维工程师等前来交流学习。继10月10日杭州Tech Insight后,北京各场再次爆满。而首次登录Tech Insight的物联网,更是坐无虚席。 万物互联,物联网快速掘起。设备数量爆发式增长,应用数量呈粉末化状态,市场研究公司Gartner称,2017年全球物联网设备数量将达到84亿,2020年物联网设备数量将达到204亿。预计到2020年中国物联网市场的产业规模将达到2万亿。 要实现这样的互联互通,物联网设备需采用物联网操作系统。物联网操作系统首要解决的是把传统的物连接到云上并支持物与物的连接,但当物被连接起来后,连接安全,数据安全,系统安全显得至

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册