私は、多くのグラフィカルな変更が行われているJavaでプログラムを書いています。その結果、stackoverflowexception が発生します。cmd で Xss コマンドを使用することによって解決された多くの問題を見てきましたが、この特定の問題は非常に永続的です。私はIDEを使用しているので、-Xssで解決しようとすると、noclassdef foundエラーや、一般的に「javac」が「シンボルが見つかりません」ラントでソースコードをコンパイルすることを拒否するなどの冗長な問題が発生します。プログラム コードは少し長いので、このような問題に遭遇したことがある人がいて、解決策を共有してくれるかどうか疑問に思っていました。ありがとうございました。
public void updateTable()
{
for(int p1Finder = 0; p1Finder < playerReference.length; p1Finder++) //for loop to locate the playerReference associated with P1
{
if(update.getP1Name().equalsIgnoreCase(playerReference[p1Finder].getName())) //p1 reference found
{
if(update.getP1Score() > update.getP2Score()) //If the player on the left (P1) wins
{
playerReference[p1Finder].setPlays();
playerReference[p1Finder].setWins();
playerReference[p1Finder].setGoalsFor(update.getP1Score());
playerReference[p1Finder].setGoalsAgainst(update.getP2Score());
playerReference[p1Finder].setGoalDifference();
playerReference[p1Finder].setPoints();
}
else if(update.getP1Score() < update.getP2Score()) //If the player on the left (P1) loses
{
}
else //if the game ends in a draw
{
}
}
repaint();
}
}
上記の方法は、特定のスコアで動作し、リーグ テーブルを再描画することになっています。テーブル内のすべてが描画されます (つまり、Graphics メソッドを使用して)。私のプログラムのpaintComponentメソッドは以下の通りです。
protected void paintComponent(Graphics ink)
{
super.paintComponent(ink);
Font decorativeFont = new Font("Harrington", Font.BOLD, 30);
Font boldFont = new Font("", Font.BOLD ,20);
Font normalFont = new Font("", Font.PLAIN ,18);
ink.setFont(decorativeFont);
ink.setColor(Color.BLACK);
int yStars = 60; //y coordinate for the decorative stars
int xStars = 65; //x coordinate for the decorative stars
int countStars = 0;
//Draw the title of the football league
ink.drawString("NJENGA FOOTBALL LEAGUE", 115, 30);
//draw the decorative stars below the title
while(countStars < 55)
{
ink.drawString("*", xStars, yStars);
xStars = xStars + 10;
countStars++;
}
//remove decorative font and set the normal font
ink.setFont(boldFont);
//draw the fields that are used on the table ie.player, plays, wins etc
//use for loop
int xFields = 0; //x coordinate for the fields string names
int yFields = 80; //y coordinate for the fields string names
for(int counter = 0; counter < fieldNames.length; counter++)
{
ink.drawString(fieldNames[counter], xFields, yFields);
if(counter == 0)
{
xFields = xFields + 150;
}
else
{
xFields = xFields + 73;
}
}
//draw a blue line between the fields and the records
ink.setColor(Color.BLUE);
ink.fillRect(0, 90, getWidth(), 5);
//draw the player names and data into the table
ink.setFont(normalFont);
ink.setColor(Color.BLACK);
int xRecord;
int yRecord = 140;
for(int counter = 0; counter < playerReference.length; counter++)
{
xRecord = 0;
ink.drawString(playerReference[counter].getName().toUpperCase(), xRecord, yRecord); //draw the player name
xRecord = xRecord + 153; //increase the xCoordinate to facilitate proper drawing of next field
ink.drawString((playerReference[counter].getPlays()+""), xRecord, yRecord); //draw the player plays
xRecord = xRecord + 73; //increase the xCoordinate to facilitate proper drawing of next field
ink.drawString((playerReference[counter].getWins()+""), xRecord, yRecord); //draw the player wins
xRecord = xRecord + 73; //increase the xCoordinate to facilitate proper drawing of next field
ink.drawString((playerReference[counter].getDraws()+""), xRecord, yRecord); //draw the player draws
xRecord = xRecord + 73; //increase the xCoordinate to facilitate proper drawing of next field
ink.drawString((playerReference[counter].getLosses()+""), xRecord, yRecord); //draw the player losses
xRecord = xRecord + 73; //increase the xCoordinate to facilitate proper drawing of next field
ink.drawString((playerReference[counter].getGoalsFor()+""), xRecord, yRecord); //draw the player goals scored
xRecord = xRecord + 73; //increase the xCoordinate to facilitate proper drawing of next field
ink.drawString((playerReference[counter].getGoalsAgainst()+""), xRecord, yRecord); //draw the player goals conceeded
xRecord = xRecord + 73; //increase the xCoordinate to facilitate proper drawing of next field
ink.drawString((playerReference[counter].getGoalDifference()+""), xRecord, yRecord); //draw the player goal difference
xRecord = xRecord + 73; //increase the xCoordinate to facilitate proper drawing of next field
ink.drawString((playerReference[counter].getPoints()+""), xRecord, yRecord); //draw the player points
yRecord = yRecord + 50; //increase the yCoordinate to facilitate proper drawing of next record
}
//draw a blue line between the fields and the records
ink.setColor(Color.BLUE);
ink.fillRect(0, yRecord, getWidth(), 5);
}
プログラムには4つのクラスがあります。問題がここにあるのか、それとも別の場所にあるのかはわかりませんが、始めるには良い場所だと思います。