写了一个每一秒循环更新一次好友列表,并将在线好友置顶的JList,结果运行的时候打印出数组越界异常。
而且不是每次寻环都打印异常,大概十几二十秒才打印一次,而且中间间隔时间不确定。
如果我把循环时间改为一毫秒,控制台就是飞快打印异常;如果改成5毫秒,就是等待一段时间,并不是刚才的五倍时间。
挺纳闷的,本人新手,望高手解答,第一次发帖,请多关照!
import java.util.HashMap;import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;public class WhileTest { JFrame jf = new JFrame();
@SuppressWarnings("unchecked")
DefaultListModel lm = new DefaultListModel();
JList jl = new JList(lm);
public WhileTest(){
jf.setVisible(true);
jf.setBounds(300, 300, 300, 300);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(jl);
lm.add(0, "好友a");
lm.add(1, "好友b");
lm.add(2, "好友c");
String[] s= new String[]{"好友a","好友b"};//a、b是要置顶的在线好友
// 问题处在下面;
while (true) {
for (int i = 0; i < s.length; i++) {
for (int j = 0; j < lm.size(); j++) {
if (s[i].equals(lm.get(j))) {
lm.removeElementAt(j);
lm.add(0, s[i]);
}
}
}
// 上面是问题 try {
Thread.sleep(1);//线程停止一毫秒重新循环
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args){
WhileTest wt = new WhileTest();
}
}
而且不是每次寻环都打印异常,大概十几二十秒才打印一次,而且中间间隔时间不确定。
如果我把循环时间改为一毫秒,控制台就是飞快打印异常;如果改成5毫秒,就是等待一段时间,并不是刚才的五倍时间。
挺纳闷的,本人新手,望高手解答,第一次发帖,请多关照!
import java.util.HashMap;import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;public class WhileTest { JFrame jf = new JFrame();
@SuppressWarnings("unchecked")
DefaultListModel lm = new DefaultListModel();
JList jl = new JList(lm);
public WhileTest(){
jf.setVisible(true);
jf.setBounds(300, 300, 300, 300);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(jl);
lm.add(0, "好友a");
lm.add(1, "好友b");
lm.add(2, "好友c");
String[] s= new String[]{"好友a","好友b"};//a、b是要置顶的在线好友
// 问题处在下面;
while (true) {
for (int i = 0; i < s.length; i++) {
for (int j = 0; j < lm.size(); j++) {
if (s[i].equals(lm.get(j))) {
lm.removeElementAt(j);
lm.add(0, s[i]);
}
}
}
// 上面是问题 try {
Thread.sleep(1);//线程停止一毫秒重新循环
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args){
WhileTest wt = new WhileTest();
}
}
解决方案 »
- JAVA怎么自己建函数库?
- 把一个字符串转换为 文件输入流
- 关于3721
- 请教一个关于applet的初级问题
- 哪有可以下载的J2EE API文档,不是网上看的,要可以下载的
- 菜鸟问题--关于JAVA的例程TED
- 为什么一个CLASS中两个main方法只有第一个有效!!!!!!
- 大虾们:tomcat中DataSource怎么使用?高分酬谢!!
- Java新手的问题 VJ++与SUN 的JAVA 有什么不同,SUN 的JAVA 编程环境在哪里找到?
- 用Java Spring Junit测试,每次运行时都报错,求神相助!!
- 唉,真是烦死啦,再次紧急求助一个极为复杂的正则表达式
- 请教Linux下几个svn命令
import javax.swing.JFrame;
import javax.swing.JList;public class WhileTest { JFrame jf = new JFrame();
DefaultListModel lm = new DefaultListModel();
JList jl = new JList(lm);
public WhileTest(){
jf.setVisible(true);
jf.setBounds(300, 300, 300, 300);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(jl);
lm.add(0, "a");
lm.add(1, "b");
lm.add(2, "c");
String[] s= new String[]{"a","b"};
// 问题处在下面;
while (true) {
for (int i = 0; i < s.length; i++) {
for (int j = 0; j < lm.size(); j++) {
if (s[i].equals(lm.get(j))) {
lm.removeElementAt(j);
lm.add(0, s[i]);
}
}
}
// 两端注释之间是问题所在
try {
Thread.sleep(1);//线程停止一秒重新循环
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args){
WhileTest wt = new WhileTest();
}
}
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;public class WhileTest { JFrame jf = new JFrame();
DefaultListModel lm = new DefaultListModel();
JList jl = new JList(lm);
public WhileTest(){
jf.setVisible(true);
jf.setBounds(300, 300, 300, 300);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(jl);
lm.add(0, "a");
lm.add(1, "b");
lm.add(2, "c");
String[] s= new String[]{"a","b"};
// 问题处在下面;
while (true) {
for (int i = 0; i < s.length; i++) {
for (int j = 0; j < lm.size(); j++) {
if (s[i].equals(lm.get(j))) {
lm.removeElementAt(j);
lm.add(0, s[i]);
}
}
}
// 两端注释之间是问题所在
try {
Thread.sleep(1);//线程停止一秒重新循环
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args){
WhileTest wt = new WhileTest();
}
}
import javax.swing.JFrame;
import javax.swing.JList;public class WhileTest { JFrame jf = new JFrame();
DefaultListModel lm = new DefaultListModel();
JList jl = new JList(lm);
public WhileTest(){
jf.setVisible(true);
jf.setBounds(300, 300, 300, 300);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(jl);
lm.add(0, "a");
lm.add(1, "b");
lm.add(2, "c");
String[] s= new String[]{"a","b"};
// 问题处在下面;
while (true) {
for (int i = 0; i < s.length; i++) {
for (int j = 0; j < lm.size(); j++) {
if (s[i].equals(lm.get(j))) {
lm.removeElementAt(j);
lm.add(0, s[i]);
}
}
}
// 两端注释之间是问题所在
try {
Thread.sleep(1);//线程停止一秒重新循环
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args){
WhileTest wt = new WhileTest();
}
}
@SuppressWarnings("unchecked")
DefaultListModel lm = new DefaultListModel();
JList jl = new JList(lm); public WhileTest() {
jf.setVisible(true);
jf.setBounds(300, 300, 300, 300);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(jl);
lm.add(0, "好友a");
lm.add(1, "好友b");
lm.add(2, "好友c");
final String[] s = new String[] { "好友a", "好友b" };// a、b是要置顶的在线好友
// 问题处在下面;
new Thread(){
public void run(){
while (true) {
for (int i = 0; i < s.length; i++) {
String item = s[i];
moveToTop( item );
// 上面是问题
try {
Thread.sleep(1000);// 线程停止一毫秒重新循环
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}.start();
} private void moveToTop( String item ) {
for (int j = 0; j < lm.size(); j++) {
if (item.equals(lm.get(j))) {
lm.removeElementAt(j);
lm.add(0, item); }
}
} public static void main(String[] args) { WhileTest wt = new WhileTest();
}
}
moveToTop方法是我重构出来的,为了好看一点点。
if (s[i].equals(lm.get(j))) { //这样删除会造成越界
lm.removeElementAt(j);
lm.add(0, s[i]);