求助大神:用vector int 初始化集合初始化表格为何运行没有数据

查看: 1897|回复: 11
鹰眼还是没图像!求大神救命啊~~
用了山外大哥的鹰眼和多功能助手,就是没有图像!看了巴内很多帖子,还是改不出图像,不知道问题在哪里,
用示波器查看了P、V、H的波形都正确,幅值大概200mv左右。
*& &&&COPYRIGHT NOTICE
*& &&&Copyright (c) 2013,山外科技
*& &&&All rights reserved.
*& &&&技术讨论:山外论坛 http://www.vcan123.com
*& &&&除注明出处外,以下所有内容版权均属山外科技所有,未经允许,不得用于商业用途,
*& &&&修改内容时必须保留山外科技的版权声明。
* @file& && & main.c
* @brief& && &山外KL26 平台主程序
* @author& &&&山外科技
* @version& & v5.2
* @date& && &
#include &common.h&
#include &include.h&
uint8 imgbuff[CAMERA_SIZE];& && && && && && && && && &&&//定义存储接收图像的数组
uint8 img[CAMERA_W*CAMERA_H];& && && && && && && && && &//由于鹰眼摄像头是一字节8个像素,因而需要解压为 1字节1个像素,方便处理
//函数声明
void vcan_sendimg(uint8 *imgaddr, uint32 imgsize);
void img_extract(uint8 *dst, uint8 *src, uint32 srclen);
void PORTA_IRQHandler();
void DMA0_IRQHandler();
*&&@brief& && &main函数
*&&@since& && &v5.0
*&&@note& && & 山外 DMA 采集摄像头 实验
*/
void&&main(void)
{
& & //初始化摄像头
& & camera_init(imgbuff);
& & //配置中断服务函数
& & set_vector_handler(PORTA_VECTORn ,PORTA_IRQHandler);& & //设置LPTMR的中断服务函数为 PORTA_IRQHandler
& & set_vector_handler(DMA0_VECTORn ,DMA0_IRQHandler);& && &//设置LPTMR的中断服务函数为 PORTA_IRQHandler
& & while(1)
& & {
& && &&&//获取图像
& && &&&camera_get_img();& && && && && && && && && && && &&&//摄像头获取图像
& && &&&//多功能调试助手上位机显示,需要配置成黑白模式
& && &&&vcan_sendimg(imgbuff,CAMERA_SIZE);
& && &
& && &&&//解压后,图像数据就会变成灰度模式 !!!!也可在多功能调试助手上位机显示&&,需要上位机切换到【灰度图像】,然后代码修改为
& && &&&//img_extract(img, imgbuff,CAMERA_SIZE);
& && &&&//vcan_sendimg(img,CAMERA_W*CAMERA_H);& && && && & //注意,这里的 数据大小已经改为 CAMERA_W*CAMERA_H
& & }
}
//发送图像到上位机显示
//不同的上位机,不同的命令
//如果使用其他上位机,则需要修改代码
void vcan_sendimg(uint8 *imgaddr, uint32 imgsize)
{
#define CMD_IMG& &&&1
& & uint8 cmdf[2] = {CMD_IMG, ~CMD_IMG};& & //山外上位机 使用的命令
& & uint8 cmdr[2] = {~CMD_IMG, CMD_IMG};& & //山外上位机 使用的命令
& & uart_putbuff(UART0, cmdf, sizeof(cmdf));& & //先发送命令
& & uart_putbuff(UART0, imgaddr, imgsize); //再发送图像
& & uart_putbuff(UART0, cmdr, sizeof(cmdr));& & //先发送命令
}
*&&@brief& && &二值化图像解压(空间 换 时间 解压)
*&&@param& && &dst& && && && & 图像解压目的地址
*&&@param& && &src& && && && & 图像解压源地址
*&&@param& && &srclen& && && & 二值化图像的占用空间大小
*&&@since& && &v5.0& && && && &img_extract(img, imgbuff,CAMERA_SIZE);
*&&Sample usage:
*/
void img_extract(uint8 *dst, uint8 *src, uint32 srclen)
{
& & uint8 colour[2] = {255, 0}; //0 和 1 分别对应的颜色
& & //注:山外的摄像头 0 表示 白色,1表示 黑色
& & uint8
& & while(srclen --)
& & {
& && &&&tmpsrc = *src++;
& && &&&*dst++ = colour[ (tmpsrc && 7 ) & 0x01 ];
& && &&&*dst++ = colour[ (tmpsrc && 6 ) & 0x01 ];
& && &&&*dst++ = colour[ (tmpsrc && 5 ) & 0x01 ];
& && &&&*dst++ = colour[ (tmpsrc && 4 ) & 0x01 ];
& && &&&*dst++ = colour[ (tmpsrc && 3 ) & 0x01 ];
& && &&&*dst++ = colour[ (tmpsrc && 2 ) & 0x01 ];
& && &&&*dst++ = colour[ (tmpsrc && 1 ) & 0x01 ];
& && &&&*dst++ = colour[ (tmpsrc && 0 ) & 0x01 ];
& & }
}
*&&@brief& && &PORTA中断服务函数
*&&@since& && &v5.0
*/
void PORTA_IRQHandler()
{
& & uint8&&n = 0;& & //引脚号
& & uint32 flag = PORTA_ISFR;
& & PORTA_ISFR&&= ~0;& && && && && && && && && && && &&&//清中断标志位
& & n = 6;& && && && && && && && && && && && && && && & //场中断
& & if(flag & (1 && n))& && && && && && && && && && && &//PTA6触发中断
& & {
& && &&&camera_vsync();
& & }
}
*&&@brief& && &DMA0中断服务函数
*&&@since& && &v5.0
*/
void DMA0_IRQHandler()
{
& & camera_dma();
}
本帖子中包含更多资源
才可以下载或查看,没有帐号?
你现在是只用上位机里面的串口助手模式,不是图像模式,肯定看不到图像。
山外哥,你理解错了!我是在智能车助手那个框框里面打开了串口的,没有图像,只是把数据传上来,不知道问题出在哪里,用yy摄像头助手的也试了,也是啥都没有!
你现在是只用上位机里面的串口助手模式,不是图像模式,肯定看不到图像。
山外哥,你理解错了!我是在智能车助手那个框框里面打开了串口的,没有图像,只是把数据传上来,不知道问题出在哪里,用yy摄像头助手的也试了,也是啥都没有!
<font color="#0221813 发表于
你用十六进制格式,看看串口通信正不正常。
而且检查图像格式和上位机是否匹配。
你用十六进制格式,看看串口通信正不正常。
而且检查图像格式和上位机是否匹配。
本帖子中包含更多资源
才可以下载或查看,没有帐号?
你用十六进制格式,看看串口通信正不正常。
而且检查图像格式和上位机是否匹配。
串口通讯没问题,十六进制显示和发送都没问题!,图象宽度为80*60,其他配置都一切正常,问题是没图像!,找了一天都没找出问题纳,还有其他方面的可能吗?比如摄像头的P、V、H三根线不应该加下拉电阻或者上拉电阻?问题是示波器显示的波形都正常啊!
//配置摄像头的特性
#define CAMERA_USE_HREF& &&&0& && && && && &//是否使用 行中断 (0 为 不使用,1为使用)
#define CAMERA_COLOR& && &&&0& && && && && &//摄像头输出颜色 , 0 为 黑白二值化图像 ,1 为 灰度 图像 ,2 为 RGB565 图像
#define CAMERA_POWER& && &&&0& && && && && &//摄像头 电源选择, 0 为 3.3V ,1 为 5V
//配置摄像头顶层接口
#define camera_init(imgaddr)& & ov7725_eagle_init(imgaddr)
#define camera_get_img()& && &&&ov7725_eagle_get_img()
#define camera_vsync()& && && & ov7725_eagle_vsync()
#define camera_href()& && && &&&//ov7725_eagle_href()
#define camera_dma()& && && && &ov7725_eagle_dma()
//配置 摄像头 参数
#define CAMERA_DMA_CH& && & OV7725_EAGLE_DMA_CH& && && &//定义摄像头的DMA采集通道
#define CAMERA_W& && && && &OV7725_EAGLE_W& && && && &&&//定义摄像头图像宽度
#define CAMERA_H& && && && &OV7725_EAGLE_H& && && && &&&//定义摄像头图像高度
#define CAMERA_SIZE& && && &OV7725_EAGLE_SIZE& && && &&&//图像占用空间大小
#define CAMERA_DMA_NUM& && &OV7725_EAGLE_DMA_NUM& && &&&//DMA采集次数
#endif&&//#if ( USE_CAMERA == CAMERA_OV7725_EAGLE )
//配置摄像头 属性
#define OV7725_EAGLE_DMA_CH& && & DMA_CH0& && && && && && && && && && & //定义摄像头的DMA采集通道
#define OV7725_EAGLE_W& && && && &80& && && && && && && && && && && && &//定义摄像头图像宽度
#define OV7725_EAGLE_H& && && && &60& && && && && && && && && && && && &//定义摄像头图像高度
#define OV7725_EAGLE_SIZE& && && &(OV7725_EAGLE_W * OV7725_EAGLE_H/8 )&&//图像占用空间大小
#define OV7725_EAGLE_DMA_NUM& && &(OV7725_EAGLE_SIZE )& && && && && && &//DMA采集次数
本帖子中包含更多资源
才可以下载或查看,没有帐号?
串口通信正常,代码有没有卡死?
没发现有错的地方,如果代码不卡死,应该采集没问题。能用lcd显示不?
没发现有错的地方,如果代码不卡死,应该采集没问题。能用lcd显示不?
串口一直在发送数据,不存在程序会卡死吧,中断程序后没有停止在某个位置,程序应该不会卡死,直接用的山外的库!
那些发的十六进制山外哥感觉对不咯?是8个组成一行吗还是一个就是一行哦,这个是没解压的数据 !
我也感觉没头绪咯!
串口一直在发送数据,不存在程序会卡死吧,中断程序后没有停止在某个位置,程序应该不会卡死,直接用的山 ...
不清楚是你的上位机参数配置有误,导致识别不正确。还是怎样。
串口一直在发送数据,不存在程序会卡死吧,中断程序后没有停止在某个位置,程序应该不会卡死,直接用的山 ...
单片机里的鹰眼分辨率配置为多少?
上位机里配置为多少?数据格式有没有选择二值化图像?
山外飞思卡尔智能车论坛线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构。这些类均在java.util包中。本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类。
Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMap
Collection接口  Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些 Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类, Java SDK提供的类都是继承自Collection的&子接口&如List和Set。  所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的 Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。  如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:    Iterator it = collection.iterator(); // 获得一个迭代子    while(it.hasNext()) {      Object obj = it.next(); // 得到下一个元素    }  由Collection接口派生的两个接口是List和Set。
List接口  List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。和下面要提到的Set不同,List允许有相同的元素。  除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个 ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。  实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。
LinkedList类  LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在 LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。  注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:    List list = Collections.synchronizedList(new LinkedList(...));
ArrayList类  ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。  每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。  和LinkedList一样,ArrayList也是非同步的(unsynchronized)。
Vector类  Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的 Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。
Stack 类  Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得 Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。
Set接口  Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。  很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。  请注意:必须小心操作可变对象(Mutable Object)。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。
Map接口  请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个 value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
Hashtable类  Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。  添加数据使用put(key, value),取出数据使用get(key),这两个基本操作的时间开销为常数。Hashtable 通过initial capacity和load factor两个参数调整性能。通常缺省的load factor 0.75较好地实现了时间和空间的均衡。增大load factor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作。使用Hashtable的简单示例如下,将1,2,3放到Hashtable中,他们的key分别是&one&,&two&,&three&:    Hashtable numbers = new Hashtable();    numbers.put(&one&, new Integer(1));    numbers.put(&two&, new Integer(2));    numbers.put(&three&, new Integer(3));  要取出一个数,比如2,用相应的key:    Integer n = (Integer)numbers.get(&two&);    System.out.println(&two = & + n);  由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置,因此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object,如果你用自定义的类当作key的话,要相当小心,按照散列函数的定义,如果两个对象相同,即obj1.equals(obj2)=true,则它们的hashCode必须相同,但如果两个对象不同,则它们的hashCode不一定不同,如果两个不同对象的hashCode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashCode()方法,能加快哈希表的操作。  如果相同的对象有不同的hashCode,对哈希表的操作会出现意想不到的结果(期待的get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,而不要只写其中一个。  Hashtable是同步的。
HashMap类  HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load factor过低。
WeakHashMap类  WeakHashMap是一种改进的HashMap,它对key实行&弱引用&,如果一个key不再被外部所引用,那么该key可以被GC回收。
总结  如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。  如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。  要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。  尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。
同步性Vector 是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。
数据增长从内部实现机制来讲ArrayList和Vector都是使用数组(Array)来控制集合中的对象。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度, ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用 Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。
使用模式在ArrayList和Vector中,从一个指定的位置(通过索引)查找数据或是在集合的末尾增加、移除一个元素所花费的时间是一样的,这个时间我们用O(1)表示。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢?
这意味着,你只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是其他操作,你最好选择其他的集合操作类。比如,LinkList集合类在增加或移除集合中任何位置的元素所花费的时间都是一样的?O(1),但它在索引一个元素的使用缺比较慢-O(i),其中i是索引的位置.使用 ArrayList也很容易,因为你可以简单的使用索引来代替创建iterator对象的操作。LinkList也会为每个插入的元素创建对象,所有你要明白它也会带来额外的开销。
最后,在《Practical Java》一书中Peter Haggar建议使用一个简单的数组(Array)来代替Vector或ArrayList。尤其是对于执行效率要求高的程序更应如此。因为使用数组(Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作。
Java 中 Vector、ArrayList、List 使用深入剖析 - 程序杂烩本文来自清风细雨阁(700net.com)原址查看:http://www.700net.com/rewrite.php/read-4491.html&
阅读(...) 评论()求助!如何刷新JTable中的数据【java吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:687,777贴子:
求助!如何刷新JTable中的数据收藏
这问题本来半个月前就要问了,一直拖到现在突然想起来。就我目前的认知,只知道jtable如何初始化,在初始化的时候装载 table模型。可一旦初始化后再想改变里面的数据就难了,2星期前实验过多次,印象中是直接改数据的话能删不能增,替换模型的话貌似直接就没效果。
之前那个程序是这么回事的,开始程序后先从服务器下载一个清单,然后截取字符串生成模型,初始化jtable后才显示出完整的界面,这样单线程的设计会导致双击程序后要隔好几秒界面才出现,可如果做成多线程的话,不知道如何刷新jtable就会变成 完整界面都出来了,可表格是空的。求高手给一段简单的刷新范例
java,博为峰java培训,贯穿式课程体系,保证学员胜任企业岗位需求,0元入学.java,0基础120天 成就java牛人,抢!!!java课程免费试听名额,IT总监名师主讲!
多线程的话,你可以在线程中加载数据加载完了后用 SwingUtilities.invokeLater 通知界面刷新数据这样可能界面刚出来时,表格是空的然后一会儿就刷出来了
setrow(0)清空setdata添加一条
其实最简单的,你用 Vector 做 table 的模型的话只要改变 Vector 中的数据,updateUI,表格就刷新了
vector用不了,jtable的set
vector方法貌似要带进去2个vector不知道分别干嘛用的
第一个是个 Vector 的 Vector,是 data就是说先把一行的 data 放在一个 Vector 里然后把这些行Vector 放到一个总的 Vector 里第二个是 title
我理解一下啊。vector应该是个list?
值的形式排列?第一个 Vector 是一个大V ?
大V 里面包着另一个V ?
Vector[0]=另一个V 是这个思路么?这另一个V里头就是所有的数据?然后第二参数V 是title.问题是
第一个V里头的数据 jtable怎么知道里面哪一条对应哪个格子呢?
这么说吧如果第二个V是(title)这样的:&表头1, 表头2, 表头3, 表头4, 表头5&那一个大V(data)就应该是这样的结构:&&第一行的数据1, 第一行的数据2, 第一行的数据3, 第一行的数据4, 第一行的数据5&,&第二行的数据1, 第二行的数据2, 第二行的数据3, 第二行的数据4, 第二行的数据5&,&第三行的数据1, 第三行的数据2, 第三行的数据3, 第三行的数据4, 第三行的数据5&&
我们来缕一缕~~&&第一行的数据1, 第一行的数据2, 第一行的数据3, 第一行的数据4, 第一行的数据5&,&第二行的数据1, 第二行的数据2, 第二行的数据3, 第二行的数据4, 第二行的数据5&,&第三行的数据1, 第三行的数据2, 第三行的数据3, 第三行的数据4, 第三行的数据5&&首先 vector有2种添加方法,第二种好像没效果,add(obj) 和 addElement(obj)然后,如果用add方法&第一行的数据1, 第一行的数据2, 第一行的数据3, 第一行的数据4, 第一行的数据5&我要写成一个string数组对么? new String[]{....}然后vector.add(数组),
每次都add一行数据,是这样吧?
我想起来了而且 有2个vector方法的是构造函数我要刷新表格, 就得new一次?
这个使用 Vector 的情况下大 Vector 里不能放数组,也得是 Vector你是这样写的:然后,如果用add方法&第一行的数据1, 第一行的数据2, 第一行的数据3, 第一行的数据4, 第一行的数据5&我要写成一个string数组对么? new String[]{....}要换成: new 一个 小Vector小vector.add(第一行的数据1);小vector.add(第一行的数据2);小vector.add(第一行的数据3);小vector.add(第一行的数据4);小vector.add(第一行的数据5);然后:大vector.add(小vector);
不需要,让你用 Vector 的原因就是 Vector 中的数据变化后不需要 new只要 updateUI 表就会自己根据当前的 Vector 中的数据刷新比如你是 new JTabel(data, title) 生成的表格如果 data 这个 Vector 里的数据变化了不要 new只要让 table 去 updateUI ,数据就刷新了
原来是这么用的,我试试
我可以直接在edt里 updateUi么? 还是得起一个swingworker写 done里头?
应该在 EDT 里 updateUI,因为这是对界面的更新对界面的更新都应该在 EDT 里反之,如果不是在 EDT 里要做 updateUI倒是应该用 SwingUtilities.invokeLater 将之扔到 EDT 里去做
其实有个简单的方法可以判断是否为 EDT:SwingUtilities.isEventDispatchThread() 你可以这样写:
Runnable runnable = new Runnable() {
public void run() {
table.updateUI();
if (SwingUtilities.isEventDispatchThread()) {
runnable.run();
SwingUtilities.invokeLater(runnable);
}当然,能确定时就不用写顺便说一下,Swing 中,对 各种 Listener 中的方法的调用都是在 EDT 中进行的
汗,我上周发了一帖子,大熊说在EDT里刷新swing组件会导致界面卡死。。。迷茫了
你那个帖子是在 EDT 里链接网络,造成的界面卡死……
看来要用双vector方法的话就只能用原生的jtable了,我原来的jtable是自定义的类继承的table没办法使用双vector来构造。
加个构造方法就行啊YourTable(Vector rowData, Vector columnNames) {super(rowData, columnNames);}
你肯定是没看清大雄同学是怎么说的耗时的代码——放到别的进程中去只有对界面上的控件更新时,才回到 EDT 中去不要在 EDT 中做耗时的非界面操作,比如准备后台数据,比如链接网络……这些不要放到 EDT 中去
经你这么一回,我发现我怎么那么笨啊啊啊啊啊啊啊明明知道这个用法,就是没想到。
顺便问下swingworker里的process方法和done方法同样都是EDT,那么他们区别是?
process :对 doInBackground() 中调用 publish 送来的数据,进行对应处理done :是 doInBackground() 执行完成后,处理 doInBackground 返回的结果、
我用vector做的那个表点刷新一次出来数据在点次又出来一样的数据应该功能代码怎么加啊
这是赤果果的歪曲我说的是你把耗时/可能失败的操作放在EDT里所以才会导致界面卡死
不用刷新的,直接更新要改变的内容就行了,model
登录百度帐号推荐应用

我要回帖

更多关于 二维vector初始化 的文章

 

随机推荐