为什么我的Java应用程序无情地发生致命错误?

问题描述:

我从来没有见过这个,也许这是一个错误在jvm?为什么我的Java应用程序无情地发生致命错误?

我添加了一些代码来解决数独游戏:

private boolean solve(int row, int col, Cell[][] cells) 
{ 
    if (row == NUM_PUZZLE_ROWS) 
    { 
     row = 0; 
     col++; 
     if (col == NUM_PUZZLE_COLUMNS) 
      return true; 
    } 
    if (cells[row][col].getValue() != 0) // skip filled cells 
     return solve(row + 1, col, cells); 

    for (int val = 1; val <= NUM_PUZZLE_ROWS; val++) 
    { 
     if (isPossible(row, col, val, cells)) 
     { 
      cells[row][col].setValue(val); 
      if (solve(row + 1, col, cells)) 
       return true; 
     } 
    } 

    cells[row][col].setValue(0); // reset on backtrack 
    return false; 

} 

private boolean isPossible(
     int row, int col, int val, Cell[][] cells) 
{ 

    //check the row 
    for (int r = 0; r < 9; r++) // row 
    { 
     //no duplicates permitted 
     if (val == cells[r][col].getValue()) 
      return false; 
    } 


    //check the column 
    for (int c = 0; c < 9; c++) // col 
    { 
     //no duplicates permitted 
     if (val == cells[row][c].getValue()) 
      return false; 
    } 

    int rowOffset = (row/3) * 3; 
    int colOffset = (col/3) * 3; 

    //check the 3x3 box 
    for (int r = 0; r < 3; ++r) 
    { 
     for (int c = 0; c < 3; ++c) 
     { 
      if (val == cells[rowOffset + r][colOffset + c].getValue()) 
      { 
       return false; 
      } 
     } 
    } 

    return true; // no violations, so it's possible 
} 

private boolean solve(Cell[][] cells) 
{ 
    resetPuzzle(); 
    return solve(0, 0, cells); 
} 

public boolean solve() 
{ 
    return solve(cells); 
} 

我触发此代码与解决按钮。代码很好。难题解决了,一切正常。直到我关闭应用程序。这并不是每次都发生,而是:只有当我解决了一个难题时才会发生,而且这些时间只发生在一半的时间。

应用程序关闭不错,但它返回1,而不是0成功退出该日志文件:

已经由Java运行时环境检测到致命错误:

EXCEPTION_ACCESS_VIOLATION(0000005)在PC = 0x6d93591e,PID = 2368,TID = 2040

JRE版本:6.0_27-B07 的Java VM:爪哇的HotSpot(TM)客户机VM(20.2-B06混合模式下,共享的窗口86) 有问题的帧: V [JVM。DLL + 0x9591e]

如果您想提交错误报告,请访问: http://java.sun.com/webapps/bugreport/crash.jsp

---------------螺纹------- --------

当前线程(0x02be1800):JavaThread “AWT-Windows的” 守护程序 [_thread_in_vm,ID = 2040,堆叠(0x02fa0000,0x02ff0000)]

SIGINFO:ExceptionCode = 0000005,读地址0x00000000

Regis TER值:EAX = 0x02be20c8,EBX = 00000000,ECX = 00000000, EDX = 0x02fef89c ESP = 0x02fef88c,EBP = 0x02fef920,ESI = 0x02be1800, EDI = 0x02bde6d0 EIP = 0x6d93591e,EFLAGS = 0x00010202

栈顶的:( SP = 0x02fef88c)0x02fef88c:02b002b8 02be1928 02be1800 000c3550 0x02fef89c:02be20c8 000c3528 00000000 02fef97c 0x02fef8ac: 7c91084c 000b01a0 7c910981 000b0608 0x02fef8bc:7c91015d 000c3550 000c3530 02fef89c 0x02fef8cc:02fef8bd 00000001 00000008 00000000 0x02fef8dc:7e428d8b 6d14cea1 02fef8f4 00000000 0x02fef8ec:
02fef91c 6d8a2af6 02be1800 02be2df8 0x02fef8fc:02be1800 02be1928 02fef8f8 02be1c88

说明:(PC = 0x6d93591e)0x6d9358fe:78个FF FF FF 89 41 14 8B 45 交流C6 04 10 01 8B 4D 0x6d93590e:B0 8B 55 A8 8B 45 F4 89 04 8A FF 45 B0 8B 5D FC 0x6d93591e :图8b 03 8B 48 08 0F B7 51 2A 8B 40 0C 8B 4C 90 28 0x6d93592e:51 56 8D 4D BC E8 D8 A5 07 00 8B 55 18 33 C0 89

注册到存储器映射:

EAX = 0x02be20c8是未知值EBX = 0x00000000是未知值 ECX = 0x00000000是一个未知值EDX = 0x02fef89c指向 栈的线程:0x02be1800 ESP = 0x02fef88c是p ointing入堆栈 线程:0x02be1800 EBP = 0x02fef920指向到堆栈 螺纹:0x02be1800 ESI = 0x02be1800是一个线程EDI = 0x02bde6d0是 未知值

堆栈:[0x02fa0000,0x02ff0000],SP = 0x02fef88c,空闲空间= 318k 本机帧:(J =编译的Java代码,j =解释,Vv = VM代码, C =本机代码)V [jvm.dll + 0x9591e] V [jvm.dll + 0x9884c] C [awt.dll + 0x6cbbc] Java_sun_awt_windows_WChoicePeer_create + 0x10c C [USER32.dll + 0x8734] GetDC + 0x6d C [USER32.dll + 0x8816] GetDC + 0x14f C [USER32.dll + 0x18ea0] DefWindowProcW + 0x180 C [USER32.dll + 0x18eec] DefWindowProcW + 0x1cc C [ntdll.dll + 0xe473] KiUserCallbackDispatcher + 0×13

的Java帧:(J =编译的Java代码,J =解释,VV = VM代码).J sun.awt.windows.WToolkit.eventLoop()V +为0J sun.awt .windows.WToolkit.run()V + 52 j java.lang.Thread。运行()V + 11个V 〜StubRoutines :: call_stub

--------------- PROCESS ---------------

Java线程:(=>当前线程)0x02ba1400 JavaThread “线程1” 守护程序[_thread_in_native,ID = 924,栈(0x03230000,0x03280000)]
0x002b6c00 JavaThread “DestroyJavaVM”[_thread_blocked,ID = 3688, 堆(0x008c0000,0x00910000)] 0x03136c00 JavaThread “AWT-EventQueue的-0”[_thread_blocked,ID = 376, 栈(0x03280000,0x032d0000)] => 0x02be1800 JavaThread “AWT-Windows的” 守护程序[_thread_in_vm,ID = 2040,堆(0x02fa0000,0x02ff0 000)] 0x02be0800 JavaThread “AWT关断” [_thread_blocked,ID = 1924,堆叠(0x02f50000,0x02fa0000)] 0x02bdec00 JavaThread “的Java2D处置者” 守护程序[_thread_in_native,ID = 3992, 栈(0x02f00000,0x02f50000)] 0x02b57c00 JavaThread “低内存 探测器” 守护程序[_thread_blocked,ID = 3804, 栈(0x02dd0000,0x02e20000)] 0x02b52000 JavaThread “C1 CompilerThread0” 守护程序[_thread_blocked,ID = 612, 栈(0x02d80000,0x02dd0000)] 0x02b50400 JavaThread“附加 监听程序“守护程序[_thread_blocked,id = 3844, 栈(0x02ce0000,0x02d30000)] 0x02b48400 JavaThr [_thread_blocked,id = 3916, stack(0x02d30000,0x02d80000)] 0x02b4f000 JavaThread”Signal JavaThr EAD “终结” 守护程序[_thread_blocked,ID = 4092,堆叠(0x02c90000,0x02ce0000)]
0x02b46c00 JavaThread “参考处理程序” 守护程序[_thread_blocked, ID = 2828,堆叠(0x02c40000,0x02c90000)]

其他线程:0x02b0ac00 VMThread [堆栈:0x02bf0000,0x02c40000] [ID = 3612] 0x02b63000 WatcherThread [堆栈:0x02e20000,0x02e70000] [ID = 1944]

VM状态:不还原点(正常执行)

VM互斥/监视器目前拥有的线程:无

堆DEF新一代总4928K,使用823K [0x22990000, 0x22ee0000,0x27ee0000)伊甸空间4416K,使用7%[0x22990000,从空间512K 0x229ddc50,0x22de0000),100%使用的0x22e60000, 0x22ee0000,0x22ee0000 )到空间512K,使用0%[0x22de0000, 0x22de0000,0x22e60000)年老代总10944K,用于1261K [0x27ee0000,0x28990000,0x32990000)的空间10944K,11%用于 [0x27ee0000,0x2801b590,0x2801b600,0x28990000)压制烫发gen 共12288K,使用244K [0x32990000,0x33590000,0x36990000) 空间12288K,使用1%[0x32990000,0x329cd110,0x329cd200, 0x33590000) RO空间10240K,使用54%0x36990000,0x36f0f548,0x36f0f600,0x37390000) RW空间12288K,使用[55%[0x37390000,0x37a35140,0x37a35200,0x37f90000)

代码缓存[0x00910000,0x009e0000,0x02910000)total_blobs = 410 NMETHODS = 214个适配器= 132 free_code_cache = 32713344 largest_free_block = 0

动态库:0x00400000 - 0x00424000 C:\程序 文件\爪哇\ jdk1.6.0_27 \ BIN \的java.exe 0x7c900000 - 0x7c9b2000 C:\ WINDOWS \ system32 \ ntdll.dll 0x7c800000 - 0x7c8f6000 C:\ WINDOWS \ system32 \ kernel32。dll 0x77dd0000 - 0x77e6b000 C:\ WINDOWS \ system32 \ ADVAPI32.dll 0x77e70000 - 0x77f03000 C:\ WINDOWS \ system32 \ RPCRT4.dll 0x77fe0000 - 0x77ff1000 C:\ WINDOWS \ system32 \ Secur32.dll 0x7c340000 - 0x7c396000 C:\ Program 文件\的Java \ jdk1.6.0_27 \ jre的\ BIN \ MSVCR71.DLL 0x6d8a0000 - 0x6db4f000 C:\ Program Files文件\的Java \ jdk1.6.0_27 \ jre的\ BIN \客户\ jvm.dll的0x7e410000 - 0x7e4a1000 C:\ WINDOWS \ system32 \ USER32.dll 0x77f10000 - 0x77f59000 C:\ WINDOWS \ system32 \ GDI32.dll 0x76b40000 - 0x76b6d000 C:\ WINDOWS \ system32 \ WINMM.dll 0x76390000 - 0x763ad000 C:\ WINDOWS \ system32 \ IMM32.DLL 0x6d850000 - 0x6d85c000 C:\ Program Files \ Java \ jdk1.6.0_27 \ jre \ bin \ verify.dll 0x6d3d0000 - 0x6d3ef000 C:\ Program Files \ Java \ jdk1.6.0_27 \ jre \ bin \ java.dll 0x6d890000 - 0x6d89f000 C:\ Program Files \ Java \ jdk1.6.0_27 \ jre \ bin \ zip.dll 0x6d0b0000 - 0x6d1fc000 C :\ Program Files \ Java \ jdk1.6.0_27 \ jre \ bin \ awt.dll 0x73000000 - 0x73026000 C:\ WINDOWS \ system32 \ WINSPOOL.DRV 0x77c10000 - 0x77c68000 C:\ WINDOWS \ system32 \ msvcrt.dll 0x774e0000 - 0x7761e000 C:\窗口\ system32 \ OLE32.DLL 0x773d0000 - 0x774d3000 C:\ Windows \ WinSxS文件\ x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202 \ COMCTL32.DLL 0x77f60000 - 0x77fd6000 C:\窗口\ system32 \ SHLWAPI.dll 0x5ad70000 - 0x5ada8000 C:\ WINDOWS \ system32 \ uxtheme.dll 0x6d2e0000 - 0x6d32f000 C:\ Program Files \ Java \ jdk1 C:\ WINDOWS \ system32 \ shell32 C:\ WINDOWS \ system32 \ msctfime.ime 0x7c9c0000 - 0x7d1d7000 0x765c000 .dll 0x6d6b0000 - 0x6d6c3000 C:\ Program Files \ Java \ jdk1.6.0_27 \ jre \ bin \ net.dll 0x71ab0000 - 0x71ac7000 C:\ WINDOWS \ system32 \ WS2_32.dll 0x71aa0000 - 0x71aa8000 C:\ WINDOWS \ system32 \ WS2HELP.dll 0x6d6d0000 - 0x6d6d9000 C:\ PROGRAM 文件\的Java \ jdk1.6.0_27 \ jre的\ BIN \ nio.dll 0x76bf0000 - 0x76bfb000 C:\ WINDOWS \ SYSTEM32 \ PSAPI.DLL

VM参数:jvm_args :-Dfile.encoding = UTF-8 -Djava.security.policy = applet.policy java_command:SudokuA PP发射类型:SUN_STANDARD

环境变量:CLASSPATH = .; C:\程序 文件\爪哇\ JRE6 \ lib中\分机\ QTJava.zip PATH = C:\窗口\ system32; C:\ WINDOWS; C^:\ WINDOWS \ System32 \ Wbem; C:\ windows \ system32 \ WindowsPowerShell \ v1.0; C:\ windows \ system32 \ WindowsPowerShell \ v1.0; C:\ Program Files \ Common Files \ Roxio Shared \ DLLShared \ C:\ Program Files \ Common Shared \ OEM \ DLLShared \; C:\ Program Files \ Common Files \ Roxio Files \ Roxio Shared \ OEM \ DLLShared \; C:\ Program Files \ Common Files \ Roxio \ 12.0 \ DLLShared \; C:\ Program Files \ Roxio \ OEM \ AudioCore \; C:\ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \; C:\ Program Files \ Microsoft SQL 服务器\ 100 \ DTS \ BINN \; C:\ Program Files文件\的QuickTime \ QTSystem \ USERNAME = 0935231 OS = Windows_NT PROCESSOR_IDENTIFIER = x86家族6模型 42步进7,GenuineIntel

------- --------系统---------------

操作系统:Windows XP版本2600 Service Pack 3的

CPU:共8个(4个%CPU内核,每个核心2个线程)家族6模型42 步进7,cmov,cx8,fxsr,mmx,sse,sse2,sse3,ssse3,sse4.1, sse4。2,POPCNT,HT

内存:4K页,物理3318716k(2487016k免费),交换 7866808k(7197684k免费)

vm_info:爪哇的HotSpot(TM)客户机VM(20.2-B06)的Windows-86 JRE (1.6.0_27-B07)中,由 “java_re” 与MS VC++ 7.1(VS2003)

时间建立在2011年7月19日1点04分42秒:星期一11月28十二点30分52秒2011经过时间: 10秒

什么可能是错的? 代码不会抛出任何异常,并且没有任何出错的迹象。

感谢

+0

CLASSPATH = .; C:\ Program Files \ Java \ jre6 \ lib \ ext \ QTJava.zip似乎有点可笑吗? QTJava.zip是做什么的,它绝对有必要保存在lib/ext文件夹中? –

你已经找到了在Java中的漏洞,除非你有你不告诉我们一些本地代码。

+0

我没有任何本机代码。 – jmasterx

+0

你应该把它作为一个bug提交。确保包含完整的程序以及任何输入。 – Bill