Я написал работу над Java-апплетом, который, кажется, открывает sun.applet.AppletViewer, когда он работает. Я использую библиотеки acm для назначения Стэнфордского проекта Everywhere Hangman. У меня проблема, похоже, не с кодом, если только я не выполнил какую-то реализацию, которую я должен был сделать. В основном Applet Viewer висит просто говоря «запуск апплета ...» и программа не запущена. Я не сталкивался с этой проблемой раньше, поэтому я решил спросить здесь, если кто-то сталкивался с такой проблемой раньше. Я предполагаю, что это может быть случай исключения по умолчанию, который генерируется, но я не получаю сообщение об ошибке, поэтому я сомневаюсь в этом.
Я думаю, что код должен работать, но я опубликую его на тот случай, если что-то упущено. Я не совсем закончил это задание, но уверен, что это сработает, если у меня не возникнет этой проблемы.
Hangman.java
import acm.graphics.*;
import acm.program.*;
import acm.util.*;
import java.awt.*;
import java.io.*;
public class Hangman extends ConsoleProgram {
//private static final int NUM_GUESSES=8;
/*new instance of HangmanLexicon.java */
private HangmanLexicon hangLex;
private HangmanCanvas canvas;
/*new random generator to get indexes of words in hangLex*/
//private RandomGenerator rgen = RandomGenerator.getInstance();
/*Stores word that use is trying to guess*/
private String hidden="";
/*Displayed version of hidden*/
private String displayHidden = "";
/*prompt for player to enter their guess, which gets stored
* as a string*/
private String guess = readLine("Your guess: ");
/*counts down until user has no more guesses*/
private int guessCounter = 8;
private String repeat = readLine("Play again? (y or n): ");
public void init() {
canvas = new HangmanCanvas();
add(canvas);
}
/*Runs through program, acts as main*/
public void run() {
/* You fill this in */
println("Welcome to the Hangman program!");
while(true) {
setUpWord();
displayWord();
guessesLeft();
guess = readLine("Your guess: ");
println(guess);
checkGuess();
if(displayHidden.equals(hidden)) {
println("You guessed the word: " + hidden);
println("You win.");
println(repeat);
if(!repeat.equals("n")) {
guessCounter=8;
canvas.reset();
}else {
break;
}
} else if (guessCounter==0) {
println("The word was: " + hidden);
println("You lose.");
println(repeat);
if(!repeat.equals("n")) {
guessCounter=8;
canvas.reset();
}else {
break;
}
}
}
}
/*sets hidden to a random word in hangLex*/
private void setUpWord() {
hangLex = new HangmanLexicon();
hidden=hidden.concat(hangLex.getWord(8));
}
/*Prints the updated version of the known word after a guess is entered*/
private void displayWord() {
if (displayHidden.equals("")) {
for (int i= 0; i<hidden.length(); i++) {
displayHidden = displayHidden.concat("-");
}
println("The word now looks like this: " + displayHidden);
} else if(guessCounter==0) {
} else {
println("The word now looks like this: " + displayHidden);
}
}
/*prints updates on the number of guesses the user has left to console*/
private void guessesLeft() {
if (guessCounter > 1) {
println("You have " + guessCounter + " guesses left.");
} else if (guessCounter == 1) {
println("You have only one guess left.");
} else if (guessCounter == 0) {
println("You're completely hung.");
}
}
private void checkGuess() {
int letterCounter =0;
while (guess.length()>1) {
println("Guesses must be single characters.");
println(guess);
}
char checkLetter = guess.charAt(0);
guessCounter--;
//
if(Character.isLowerCase(checkLetter)) {
Character.toUpperCase(checkLetter);
}
//
for(int i=0; i<hidden.length(); i++) {
if(hidden.charAt(i) == checkLetter) {
displayHidden = displayHidden.substring(0, i) + guess +
displayHidden.substring(i+1);
} else {
letterCounter++;
}
}
//
if (letterCounter==hidden.length()) {
println("There are no " + checkLetter + "'s in the word.");
} else if (letterCounter!=hidden.length()) {
println("That guess is correct.");
}
}
}
HangmanLexicon.java
import acm.util.*;
public class HangmanLexicon {
/** Returns the number of words in the lexicon. */
public int getWordCount() {
return 10;
}
/** Returns the word at the specified index. */
public String getWord(int index) {
switch (index) {
case 0: return "BUOY";
case 1: return "COMPUTER";
case 2: return "CONNOISSEUR";
case 3: return "DEHYDRATE";
case 4: return "FUZZY";
case 5: return "HUBBUB";
case 6: return "KEYHOLE";
case 7: return "QUAGMIRE";
case 8: return "SLITHER";
case 9: return "ZIRCON";
default: throw new ErrorException("getWord: Illegal index");
}
};
}
Я еще не закончил с другим файлом, но я не думаю, что это должно вызывать беспокойство, пока я не разберусь с апплетами.