为什么工作中的java应用程序在添加一行代码后不创建22个.class文件中的1个?
我在Windows 10上运行Netbeans IDE 8.1,我的应用程序(697 kb)运行良好,直到MarketData3.java文件增长到404 kb,并且在MarketData3.java文件中添加了一行代码(甚至是一条简单的打印语句)。一旦编码添加,我会得到以下异常,因为MarketData3.class文件不是在成功编译时创建的。此异常发生在ReadyHooStockPricess.startChart中,它创建了MarketData3的实例,但在保存/编译时或在运行时未创建MarketData3.class,从而导致以下异常为什么工作中的java应用程序在添加一行代码后不创建22个.class文件中的1个?,java,ide,interpreter,netbeans-8,Java,Ide,Interpreter,Netbeans 8,我在Windows 10上运行Netbeans IDE 8.1,我的应用程序(697 kb)运行良好,直到MarketData3.java文件增长到404 kb,并且在MarketData3.java文件中添加了一行代码(甚至是一条简单的打印语句)。一旦编码添加,我会得到以下异常,因为MarketData3.class文件不是在成功编译时创建的。此异常发生在ReadyHooStockPricess.startChart中,它创建了MarketData3的实例,但在保存/编译时或在运行时未创建Ma
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: stockentrygui/MarketData3 at stockentrygui.ReadYahooStockPrices.startChart(ReadYahooStockPrices.java:1141)
该项目是大型专有项目,因此我已经包含了异常发生的相关代码,因为它成功运行,直到MarketData3超过特定大小。为了帮助理解流程,应用程序创建stockentrygui以选择特定股票,然后创建ReadyHooStockPrices(RYSP)实例以获取特定股票价格数据,然后调用stockentrygui.ReadyHooStockPrices.startChart下面的startChart方法以创建MarketData3类的实例,它计算技术数据,然后是图表3的实例以绘制价格和技术数据。图表3从MarketData3获取它显示的所有数据(价格和技术分析数据)
下面是相关的ReadyHooStockPrices.startChart方法,该方法为所选股票创建MarketData3对象(mdata=new MarketData3),然后创建Chart3类实例(c3=new Chart3)
ReadyHooStockPrices中的startChart方法由其构造函数调用
public void startChart(){
//技术分析仪ta;
市场数据3 mdata;
//c宪章;
int范围=12;
字符串startDate=null;
//新的MarketData类-发送股票、HLC阵列
//ta=新的TechnicalAnalyzer(库存、起始日期、范围、日期、数据、总天数);
mdata=新市场数据3(股票、起始日期、范围、日期、数据、总天数、警报);
//新图表-发送MarketData标识符、股票和固定范围
MarketCommentation mc=新的MarketCommentation(mdata);
c3=新图表3(股票、范围、mdata、mc、公司名称);
//c3=新图表3(库存、范围、mdata);
c3.立根背景(颜色:白色);
//c3.requestFocus();
//创建一个JFrame来放置Chart3画布和市场评论
//JFrame f=新的JFrame();
setTitle(“技术分析(按->箭头向前,”+
“我相信我找到了问题所在。我发现使用Java()的方法不能大于64 KB,由于各种技术分析测试,我的公式方法变得相当大。我假设当JRE解释器尝试创建marketData3.class时,公式方法太大,引发了上述异常。因此,我创建了两个方法,公式和technicalAnalysis,它解决了我的问题。当然,当我停止测试technicalAnalysis时cal analysis logic,我将删除大部分未使用的逻辑,方法将变得更小。我希望这有助于面临相同类型问题的人——允许方法变得太大。保持它的小。如果一个类变得太大,你可能需要将它分成两个类吗?我可以想象,如果一个java类变得太大,那么它的设计需要很多改进
public void startChart(){
//TechnicalAnalyzer ta;
MarketData3 mdata;
//Charter c;
int range=12;
String startDate=null;
//new MarketData class - send stock, HLC arrays
//ta= new TechnicalAnalyzer(stock,startDate,range,date,data,totalDays);
mdata= new MarketData3 (stock,startDate,range,date,data,totalDays,alert);
//new Chart - send MarketData identifier, stock and fix range
MarketCommentary mc = new MarketCommentary(mdata);
c3 = new Chart3(stock,range,mdata,mc,companyName);
//c3 = new Chart3(stock,range,mdata);
c3. setBackground(Color.white);
//c3.requestFocus();
//create a JFrame to put Chart3 Canvas and market commentary
//JFrame f = new JFrame();
setTitle("Technical Analysis (Press -> arrow to Forward, "+
"<- arrow to Reverse, and up arrow for more options.)");
GridBagLayout layout = new GridBagLayout();
Container c=getContentPane();
c.setLayout(layout);
c.add(c3);
c.add(mc);
pack();
show();
//setVisible(true);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}//end startChart
public MarketData3(String stk, String sdate, int r, String date1[], double data1[][], int tDays,TradeAlerts alert)
//throws AccessControlException, SQLException, Exception
//throws Exception
{//Market Data Constructor
super("MARKET TRACKER");
//if MarketData3 initiated form MarketAnalyzer3 or ReadYahooStockPrices (rysp)
stock=stk;//fixed in MarketData3, variable in rysp
startDate=sdate;//start date fixed to 0
range=r;//range fixed to 12
this.alert=alert;//multiple file trade alert
//System.out.println("135 Start MarketData3");
//if MarketData3 (MD3) initiated from ReadYahooStockPrices
if(tDays>0){
//create new arrays
date= new String [tDays];
data= new double[41][tDays];
displayData = new double[41][tDays];
trend= new int[tDays];
trendLT= new int[tDays];
trendTest=new int[7][tDays];
stop12Date= new String[tDays];
stop6Date= new String[tDays];
stop6DateTest=new String[tDays]; //v6 stop test 110809
stop6DateTestRT=new String[2][tDays];
stop48DateTestRT=new String[4][tDays];
stop6CaptureHiDate= new String[tDays];
stop6CaptureLoDate= new String[tDays];
side= new String[tDays];
momSw= new int[tDays];
trade= new String[tDays];
deltaStoch = new double[7][tDays];
dataTest=new double[10][tDays];
//load date
date=date1;
//load H, L, C prices into array
for(int x=0; x<tDays;x++){
data[0][x]=data1[0][x];
data[1][x]=data1[1][x];
data[2][x]=data1[2][x];
}
totalDays=tDays;
}//end tDays>0
Date now=new Date();
DateFormat df=DateFormat.getDateInstance();
System.out.println("MD3 205 Today's date is "+ df.format(now));
System.out.println("MD3 207 Connect to "+stock+" stockprices");
//con=new DBConnection(driver, url).getConnection();
//stmt=con.createStatement();
// store prices and dates in data arrays if MD3 initiates
if(totalDays==0){
//readStockData(); // read from mysql database
try{
if(date[0]==null)
readStockDataFile(); // read from existing csv files
}
catch(Exception e){
System.out.println("readStockData Exeption "+ e.getMessage());
}
}
// Calculate and store indicators in data array
formula();//Rev7
//getStop12();
//Find startCell
startCell = searchDates(date, startDate);
//dateData(0);// Rev4: Store dates - shift=0 initialization
//marketData();//Rev4: Store prices
//getIndicators();//Rev7
//formula();//Rev6: calculate ma, mom, vel
//trendLogic();
System.out.println("Stock Prices Read");
}// end MarketData3 Constructor