0

私は最近Javaで遊んでいて、ループで実行されるプログラムを作成しました。隅にある X を押して閉じようとしても、何も起こりませんでした。標準のマウスリスナーコードを追加して終了させようとしましたが、ループを通過しません。このプログラムは、画面上を跳ね回る小さな四角形にすぎません。

package mainPackage;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;

import javax.swing.*;

public class MainClass extends JApplet{
    public static boolean isRunning = true;
    public static void startStop(){
        if(isRunning){
            isRunning = false;
        } else {
            isRunning = true;
        }
    }
    /**
     * Eclipse kept yelling at me.
     */
    private static final long serialVersionUID = -3997547128895841169L;
    final static Color bg = Color.white;
    final static Color fg = Color.black;
            /*
     * The direction of the box; 1 is up-right, 2 is down-right, etc.
     */
    public static byte direction = 1;
            /*
             *The X and Y values start somewhat randomly.
             */
    public static short x = (short) (Math.random() * 150);
    public static short y = (short) (Math.random() * 150);
    public void init() {

        }
    public static void moveBall(){
        if(x >= 585){
            if(direction == 1){
                direction = 4;
            } else {
                direction = 3;
            }
        } else if(x <= 0){
            if(direction == 3){
                direction = 2;
            } else {
                direction = 1;
            }
        } else if(y <= 0){
            if(direction == 1){
                direction = 2;
            } else {
                direction = 3;
            }
        } else if(y >= 365){
            if(direction == 3){
                direction = 4;
            } else {
                direction = 1;
            }
        }
        if(direction == 1){
            x++; y--;
        } else if(direction == 2){ x++; y++;
        } else if(direction == 3){ x--; y++;
        } else if(direction == 4){ x--; y--;
        } else { System.out.println(direction); System.exit(5);}
    }
    public void paint(Graphics g){
        Graphics2D g2 = (Graphics2D) g;
        Color color = Color.black;
        Rectangle2D.Double a = new Rectangle2D.Double(250, 250, 10, 10);
        Rectangle2D.Double fill = new Rectangle2D.Double(0, 0, 600, 400);
        g2.setPaint(color);
        g2.fill(fill);
        while(isRunning){
            g2.setPaint(Color.blue);
            g2.fill(a);
            try {
                Thread.sleep(15L);
            } catch (InterruptedException e) {
                System.out.println("Interrupted!");
                e.printStackTrace();
            }
            g2.setPaint(Color.black);
            g2.fill(a);
            a.setRect(x, y, 10, 10);
        }
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        JFrame jframe = new JFrame("Test");
        jframe.setVisible(true);
        jframe.setBounds(250, 250, 600, 400);
        jframe.setResizable(false);
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JApplet applet = new MainClass();       
        jframe.getContentPane().add("Center", applet);
        while(isRunning){
            moveBall();
            try {
                Thread.sleep(15L);
            } catch (InterruptedException e) {
                e.printStackTrace();
                System.out.println("Interrupted.");
            }
        }
    }
}

[編集] 実行可能な JAR ファイルにエクスポートして実行したとき、タスク マネージャーを開く必要がありましたが、タスク マネージャーを閉じるために応答していないことがわかりました。

とにかく閉じることができるようにこれを書き直すことはありますか?

4

2 に答える 2

0

close イベントを聞いていないと思います。これを試してください:

class WindowEventHandler extends WindowAdapter {
 public void windowClosing(WindowEvent evt) {
  isRunnig = false;
 }
}

jframe.addWindowListener(new WindowEventHandler());
于 2013-07-20T13:45:49.627 に答える