急急...送分。。关于JSP的错误:java.lang.StringIndexOutOfBoundsException: String index

BlankMe 2003-05-05 01:10:00

在一个FOR循环中,我至少调用了十多个String类型,运行JSP程序有的时候可以执行,
有时出现错误:
java.lang.StringIndexOutOfBoundsException: String index out of range: -1

怎样释放String?? 怎样解决这个错误??
...全文
112 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shidu 2003-05-05
  • 打赏
  • 举报
回复
我认为可能出现问题的地方:
sender=senderAddr.substring(start+1, end);

或者是数组越界了。
shidu 2003-05-05
  • 打赏
  • 举报
回复
调用String的某些方法时候和长度有问题。
BlankMe 2003-05-05
  • 打赏
  • 举报
回复
for(int i=0; i<messages.length; i++)
{
int InboxID=i+InboxMsgTotalNum+1; //要存储的邮件在INBOX的位置
javax.mail.Address[] addr=messages[i].getFrom();
String senderAddr=new String();
senderAddr=addr[0].toString();
senderAddr.trim();
int start=senderAddr.indexOf("<");
int end=senderAddr.indexOf(">");
String sender=new String();
sender=senderAddr.substring(start+1, end); // 获得发送者地址

String subject=new String();
subject=messages[i].getSubject();

Object MsgContent = messages[i].getContent();
MsgContent = messages[i].getContent(); //怎样存储到数据库中?????
//邮件的内容出错:javax.mail.internet.MimeMultipart@4d2197

java.text.Format formatter = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm");
String sendtime=new String();
sendtime=formatter.format(messages[i].getSentDate());
out.println(sendtime);
int size=messages[i].getSize();

//执行数据库插入操作
String ConnInsert =new String();
ConnInsert = "jdbc:odbc:webmail"; //数据源
Connection connectInsert =null;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(java.lang.ClassNotFoundException e) {
System.err.println( e.getMessage());
}

try {

//连接数据库
connectInsert = DriverManager.getConnection(ConnInsert,logName,passwd);
Statement stmtInsert = connectInsert.createStatement();
String sqlInsert=new String();
//sqlInsert="insert into INBOX(ID,userID,sender,subject,size)";
//sqlInsert+=" values('"+InboxID+"','"+userID+"','"+sender+"','"+subject+"','"+size+"')";

sqlInsert="insert into INBOX(ID,userID,sender,subject,sendtime,content,size)";
sqlInsert+=" values('"+InboxID+"','"+userID+"','"+sender+"','"+subject+"','"+sendtime+"','"+contents+"','"+size+"')";
stmtInsert.executeUpdate(sqlInsert);

}
catch(SQLException ex) {
System.err.println(ex.getMessage());
}


/****************** 判断是否附件 ************************/

if(messages[i].isMimeType("multipart/*")) //附件
{
FetchProfile fp=new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
fp.add(FetchProfile.Item.FLAGS);
fp.add("X-Mailer");
folder.fetch(messages,fp);

Object content=messages[i].getContent();
Multipart multipart = (Multipart)content;
for (int c=0, n=multipart.getCount(); c<n; c++)
{

Part part = multipart.getBodyPart(c);



//String msg=getStr(part.getContent());
/***StringBuffer buf=new StringBuffer(msg.length()+6);
char ch=' ';
for(int u=0;u<msg.length();u++)
{
ch=msg.charAt(u);
if(ch=='\n')buf.append("");
else buf.append(ch);
}
String mm = buf.toString(); ********/
// out.println(new String(mm.getBytes("iso-8859-1"),"gb2312"));


String disposition = null;
disposition = part.getDisposition();
if ( disposition != null &&(disposition.equals(Part.ATTACHMENT) || disposition.equals(Part.INLINE)))
{
//String fileName=getStr(part.getFileName()); //转换成中文GB2313
String fileName=null,AttachName =new String();
fileName=part.getFileName();
AttachName =fileName; //附件文件名
InputStream inputstream=part.getInputStream();
if(fileName==null)
{
fileName=File.createTempFile("attachment",".out").getName();
}

String filePath=new String();
filePath="c:\\MailAttachment\\"+username+"\\" ; // 存储路径
fileName=filePath+fileName;
File file=new File(fileName);
for(int j=0;file.exists();j++)
{
file=new File(fileName+j);
}
FileOutputStream fileoutputstream =new FileOutputStream(file);
BufferedOutputStream bufferedoutputstream =new BufferedOutputStream(fileoutputstream);
BufferedInputStream bufferedinputstream =new BufferedInputStream(inputstream);

int m;
while ((m=bufferedinputstream.read())!=-1)
bufferedoutputstream.write(m);


//save the filename
String SqlUpdate=new String();
SqlUpdate="UPDATE INBOX SET AttachmentName='"+AttachName+"',AttachmentPath='"+filePath+"' ";
SqlUpdate+="WHERE ID='"+InboxID+"'"; //InboxID
executeUpdateSql(SqlUpdate);

bufferedoutputstream.flush();
bufferedoutputstream.close();
bufferedinputstream.close();
}
}






//out.println("Attachment2");
}



connectInsert.close();
} //FOR 循环结束
hfprogramer 2003-05-05
  • 打赏
  • 举报
回复
超过了字符串的长度了吧。
yoken 2003-05-05
  • 打赏
  • 举报
回复
数组越界
lynx1111 2003-05-05
  • 打赏
  • 举报
回复
贴代码!·
有楼上兄弟在
尽管贴,保证摆平!
Philzzf 2003-05-05
  • 打赏
  • 举报
回复
数组越界了
比如
String[] s = {"1","2","3","4","5"};
System.out.println(s[5]);

这样就错了,编译能通过,但运行时会异常
其他还有很多异常,我就不一一列举了,我要说明的是,一个合格的程序员,需要对程序中常见的问题有相当的了解和相应的解决办法,否则仅仅停留在写程序而不会改程序的话,会极大影响到自己的开发的。关于异常的全部说明,在api里都可以查阅。 算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:ArrayIndexOutOfBoundsException 违背安全原则异常:SecturityException 文件已结束异常:EOFException 文件未找到异常:FileNotFoundException 字符串转换为数字异常:NumberFormatException 操作数据库异常:SQLException 输入输出异常:IOException 方法未找到异常:NoSuchMethodException java.lang.AbstractMethodError 抽象方法错误。当应用试图调用抽象方法抛出。 java.lang.AssertionError 断言错。用来指示一个断言失败的情况。 java.lang.ClassCircularityError 类循环依赖错误。在初始化一个类,若检测到类之间循环依赖则抛出该异常。 java.lang.ClassFormatError 类格式错误。当Java虚拟机试图从一个文件中读取Java类,而检测到该文件的内容不符合类的有效格式抛出。 java.lang.Error 错误。是所有错误的基类,用于标识严重的程序运行问题。这些问题通常描述一些不应被应用程序捕获的反常情况。 java.lang.ExceptionInInitializerError 初始化程序错误。当执行一个类的静态初始化程序的过程中,发生了异常抛出。静态初始化程序是指直接包含于类中的static语句段。 java.lang.IllegalAccessError 违法访问错误。当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。 java.lang.IncompatibleClassChangeError 不兼容的类变化错误。当正在执行的方法所依赖的类定义发生了不兼容的改变,抛出该异常。一般在修改了应用中的某些类的声明定义而没有对整个应用重新编译而直接运行的情况下,容易引发该错误。 java.lang.InstantiationError 实例化错误。当一个应用试图通过Java的new操作符构造一个抽象类或者接口抛出该异常. java.lang.InternalError 内部错误。用于指示Java虚拟机发生了内部错误。 java.lang.LinkageError 链接错误。该错误及其所有子类指示某个类依赖于另外一些类,在该类编译之后,被依赖的类改变了其类定义而没有重新编译所有的类,进而引发错误的情况。 java.lang.NoClassDefFoundError 未找到类定义错误。当Java虚拟机或者类装载器试图实例化某个类,而找不到该类的定义抛出该错误。 java.lang.NoSuchFieldError 域不存在错误。当应用试图访问或者修改某类的某个域,而该类的定义中没有该域的定义抛出该错误。 java.lang.NoSuchMethodError 方法不存在错误。当应用试图调用某类的某个方法,而该类的定义中没有该方法的定义抛出该错误。 java.lang.OutOfMemoryError 内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象抛出该错误。 java.lang.StackOverflowError 堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出抛出该错误。 java.lang.ThreadDeath 线程结束。当调用Thread类的stop方法抛出该错误,用于指示线程结束。 java.lang.UnknownError 未知错误。用于指示Java虚拟机发生了未知严重错误的情况。 java.lang.UnsatisfiedLinkError 未满足的链接错误。当Java虚拟机未找到某个类的声明为native方法的本机语言定义抛出。 java.lang.UnsupportedClassVersionError 不支持的类版本错误。当Java虚拟机试图从读取某个类文件,但是发现该文件的主、次版本号不被当前Java

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧