Я думаю, что для этого вам следует использовать не Frame / JFrame, а JDialog, так как окно ведет себя как диалог. Также убедитесь, что вы используете JApplet, а не апплет.
Редактировать
Обратите внимание, что я не могу воспроизвести вашу проблему, основываясь на отображаемом фрагменте кода. Подумайте о создании и публикации SSCCE , который бы показал нам проблему напрямую.
Редактировать 2
Мой SSCCE, который не воспроизводит вашу проблему:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class AppletEg extends JApplet {
private static final int MAX_LOOP = 30;
private static final long SLEEP_TIME = 500;
private JFrame console;
private JTextArea consoleText;
private Thread gameThread;
@Override
public void init() {
console = new JFrame();
console.setSize(500, 300);
console.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
console.setVisible(false);
}
});
consoleText = new JTextArea();
consoleText.setPreferredSize(new Dimension(500, 300));
console.add(new JScrollPane(consoleText));
console.setVisible(true);
gameThread = new Thread() {
public void run() {
mainLoop();
}
};
gameThread.start();
}
private void mainLoop() {
for (int i = 0; i < MAX_LOOP; i++) {
System.out.println("I: " + i);
try {
Thread.sleep(SLEEP_TIME);
} catch (InterruptedException e) {
}
}
}
}
Редактировать 3
Мой SSCCE с использованием JDialog:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class AppletEg extends JApplet {
private static final int MAX_LOOP = 30;
private static final long SLEEP_TIME = 500;
private JDialog console;
private JTextArea consoleText;
private Thread gameThread;
@Override
public void init() {
Window win = SwingUtilities.getWindowAncestor(this);
console = new JDialog(win);
consoleText = new JTextArea();
consoleText.setPreferredSize(new Dimension(500, 300));
console.add(new JScrollPane(consoleText));
console.pack();
console.setLocationByPlatform(true);
console.setVisible(true);
gameThread = new Thread() {
public void run() {
mainLoop();
}
};
gameThread.start();
}
private void mainLoop() {
for (int i = 0; i < MAX_LOOP; i++) {
System.out.println("i: " + i);
try {
Thread.sleep(SLEEP_TIME);
} catch (InterruptedException e) {
}
}
}
}