我一直在尝试实现和调整我的编码风格,更多的是程序编程风格,但在尝试运行另一个使用系统注册表的类时遇到了问题。此外,代码在主类中工作正常。 P.S我来自一个脚本背景。
代码错误:未处理的类型' System.StackOverflowException'发生在System.Windows.Forms.dll
中我已经从主应用程序中删除了代码,以便更容易找到问题。
主要表单类:
import java.util.StringTokenizer;
import java.util.regex.Pattern;
public class CommandFormatValidator {
private Pattern adlPatternAll = Pattern
.compile("^ACTV/(READ|ADD|DEL|RPL)/ADL.*");
private Pattern adlPatternAddDefault = Pattern
.compile("^ACTV/ADD/ADL/(DFLTTY((/([A-Z0-9]{7})){1,5})|DFLMIN(/[0-9]{1,4}))");
private Pattern adlPatternDeleteTtymailGeneral = Pattern
.compile("^ACTV/(DEL|READ)/ADL/TTYMAIL(/[A-Z0-9]{7})?");
//around 20 more pattern declarations...
public void validate(Object payload){
String command = (String)payload;
if (adlPatternAll.matcher(command).matches()) {
if (!adlPatternAddDefault.matcher(command).matches()) {
if (!adlPatternAddCityTty.matcher(command).matches()) {
if (!adlPatternAddCityFltTty.matcher(command).matches()) {
if (!adlPatternAdd.matcher(command).matches()) {
if (!adlPatternDelDefault.matcher(command).matches()) {
if (!adlPatternDel.matcher(command).matches()) {
if (!adlPatternDelCityFltTty.matcher(command).matches()) {
if (!adlPatternRpl.matcher(command).matches()) {
if (!adlPatternRead.matcher(command).matches()) {
if (!adlPatternReadCityFlt.matcher(command).matches()) {
if(!adlPatternAddTtymail.matcher(command).matches()) {
if( !adlPatternDeleteTtymailGeneral.matcher(command).matches()) {
if (!adlPatternDeleteTtymail.matcher(command).matches()) {
throw new ServiceException(CommandErrors.INVALID_FORMAT);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
识别TestClass:
public partial class Form1test : Form
{
// An unhandled exception of type 'System.StackOverflowException'
// occurred in System.Windows.Forms.dll
public Form1test()
{
TestClass lsr = new TestClass();
lsr.chkRegAct();
InitializeComponent();
}
}
答案 0 :(得分:5)
TestClass
源自Form1Test
。
您创建一个新的TestClass
,结果调用基类(Form1Test
)的构造函数,该构造函数生成一个新的TestClass
,结果调用基类的构造函数({{1生成一个新的Form1Test
,它会调用基类(TestClass
)的构造函数,生成一个新的Form1Test
,从而调用基类的构造函数({{1}生成一个新的TestClass
,它会调用基类(Form1Test
)的构造函数,生成一个新的TestClass
,从而调用基类的构造函数({{1}生成一个新的Form1Test
,它会调用基类(TestClass
)的构造函数,生成一个新的Form1Test
,从而调用基类的构造函数({{1}生成一个新的TestClass
,它会调用基类(Form1Test
)的构造函数,生成一个新的TestClass
,从而调用基类的构造函数({{1} }})生成.....
由于无限递归导致的大量函数调用导致的StackOverflowException。
答案 1 :(得分:3)
由于继承链 TestClass:Form1test 。调用TestClass构造函数会创建无限递归。