java 中一个很容易忽略的多线程错误!

原创 2004年06月23日 13:16:00

最近用 Java 写一个帐户管理软件。但操作数据库的时候老是引起 JVM 停机。开始一直以为是数据库操作的实现类有问题。单独写了一个测试程序来验证,数据库的操作没有问题。这就让我有点很搞不懂,由于错误是引起 JVM 停机,没有任何关于Java代码错误的任何提示。这个问题一直困扰了我几天,最后经过反复的对比错误程序和测试程序才发现了这个错误。

这是我的程序的 main()函数:
public static void main(String args[]) {
  System.setProperty("swing.plaf.metal.controlFont","宋体");
  HMDatabase hmdb = HMDatabaseFactory.getHMDatabase();
  if(!hmdb.isOK()) {
   System.out.println ("数据库打开错误!");
   return;
  }
  DrugManage frame = new DrugManage("药品管理");
  HMDatabaseFactory.closeHMDatabase();
 }
数据库的操作在 DrugManage 界面中进行。

因此我在 DrugManage 的起始界面中可以看到数据库中的数据,但我在界面上一操作数据库就会导致 JVM退出。

错误的原因在于:

派生于 JFrame 的 DrugManage 在显示时会生成一个新的线程来执行用户操作。
原来的 main 线程会在 DrugManage 构造好后,继续执行。最后关闭数据库。

所以我可以在 DrugManage 的界面显示时能正确读取到数据库中的数据。
但当我在界面中对数据库中的数据进行操作时。main 线程已经执行到最后一条语句,把数据库关闭了。我这时再操作数据库,当然会 JVM 超出内存,引起 JVM 的停机。

Java基础(容易忽略的java细节)

java基础片,大家经常忽略的一些细节性问题,在此分享一下public class Test1 { public static void main(String[] args) { ...
  • zhanggaofeixy
  • zhanggaofeixy
  • 2016年04月16日 14:02
  • 319

java中容易忽略的小细节

如果问大家private 、public和protected 这些修饰符的具体概念,想必大家肯定能回答的出,对了还有一种默认的访问权限 就是没有这些修饰符时(在同一包下,都能被访问);但是大家有没有想...
  • qq_27778869
  • qq_27778869
  • 2016年07月15日 11:27
  • 357

java中容易犯错的知识点

java中容易犯错的知识点该博客的内容是在看了《head first java》之后总结的一些知识点,是针对我个人的不足总结的知识点,我写博客还是newer,希望大神们多多指教。需要注意的是这篇内容的...
  • LilyNothing
  • LilyNothing
  • 2016年05月27日 18:56
  • 3594

1 那些年遇到过的面试题 - 40个多线程问题总结

面试中经常碰到的多线程问题。
  • lis_12
  • lis_12
  • 2017年01月12日 18:15
  • 846

Java 在acm中的使用

//原文地址:http://www.cppblog.com/vontroy/archive/2010/05/24/116233.html 先说一下Java对于ACM的一些优点吧: (1...
  • laziercs
  • laziercs
  • 2013年03月15日 17:07
  • 585

Java 文件复制很容易 Spring Utils 帮你忙

也许你在项目中遇到了要复制或移动某个文件的操作,用传统的输入输出流折腾半了天,这东西着急忙慌的写完了要是不仔细测试下可能还有bug呢。 但是,如果你项目里使用spring,那一切就好办了。sprin...
  • lichenliang666
  • lichenliang666
  • 2018年01月11日 17:54
  • 15

HTML中忽略的小问题

1、padding和margin 例子 1 padding:10px 5px 15px 20px;(上,右,下,左) 上内边距是 10px右内边距是 5px下内边距是 15px左内边距是 20p...
  • u012503049
  • u012503049
  • 2014年03月04日 13:04
  • 402

一个比较容易忽略的错误

#include #define MAXLINE 1000 int getline (char line[], int maxline); void copy (char to[...
  • a564034199
  • a564034199
  • 2010年07月22日 18:01
  • 221

中断过程中,一个容易忽略的错误

这是两年前开发的一个产品,一项功能是在通电后播放40秒的语音.     测试时发现,大约通电70-80次就有一次播放时间不够40秒就提前停止。     当时以为复位有问题,换了复位片,没好。又...
  • evil_magician
  • evil_magician
  • 2016年06月05日 09:05
  • 428

容易出错的Java笔试题

检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果。 1 2 3 4 5 6 7 8 9 10 ...
  • quentain
  • quentain
  • 2015年08月21日 11:47
  • 731
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 中一个很容易忽略的多线程错误!
举报原因:
原因补充:

(最多只允许输入30个字)