我忘记停止一个gui程序并再次运行它。现在我无法在不杀死eclipse的情况下关闭第一个程序

时间:2011-10-14 12:26:39

标签: java eclipse

我正在开发一个简单的GUI应用程序,它只是在画布上绘制一些图形。环境是Vista 64.当我运行程序时,Windows调整大小和最小化按钮工作,但关闭按钮不起作用。所以我必须按下Eclipse中的停止按钮才能终止该程序。

但有时我会忘记按停止,然后再次运行该程序。第一个实例卡住了,我无法在不关闭Eclipse的情况下摆脱它。如果我粗心大意,我最终会得到几个我无法关闭的java窗口。有没有办法控制和关闭窗户?另外,为什么关闭按钮不起作用?

我怀疑代码在这种情况下很重要,但现在是:

import java.awt.*;

public class RobotFace extends Canvas{

/**
 * @param args
 */
public static void main(String[] args) {
    RobotFace c = new RobotFace();
    c.setBackground(Color.white);
    c.setSize(350, 350);

    Frame f = new Frame();
    f.add(c); 
    f.setLayout(new FlowLayout()); 
    f.setSize(350,350);
    f.setVisible(true);
}
public void paint(Graphics g){
    g.setColor(Color.black);
    int width = 150;
    int height = 200;
    g.drawRect((getWidth()-width)/2, (getHeight()-height)/2, width, height);
    g.setColor(Color.gray);
    g.fillRect((getWidth()-width)/2, (getHeight()-height)/2, width, height);
    g.setColor(Color.white);
    g.fillRect((getWidth()-80)/2, (getHeight()+50)/2, 80, 20);
    g.setColor(Color.yellow);
    g.fillOval((getWidth()-105)/2, (getHeight()-100)/2, 30, 30);
        g.fillOval((getWidth()+45)/2, (getHeight()-100)/2, 30, 30);
    }
}

4 个答案:

答案 0 :(得分:3)

enter image description here你也可以使用eclips控制台杀死它,当你在eclips中打开控制台视图时,会有一个红色按钮(右侧cornor)。

打开控制台视图

窗口 - >显示视图 - >控制台

答案 1 :(得分:2)

使用这种方式可以关闭框架/窗口

//add window event adapter
f.addWindowListener(new MyWindowAdapter());


class MyWindowAdapter extends WindowAdapter{

   MyWindowAdapter(){
   }

   //implement windowClosing method
   public void windowClosing(WindowEvent e) {
      System.exit(0);
   }
}

答案 2 :(得分:1)

第一个应用程序实例的Eclipse控制台应该仍然可用,只是不可见。在“控制台”选项卡上,可以单击看起来像蓝色小监视器的工具栏按钮,以在应用程序实例之间切换。要停止第一个应用程序实例,您可以使用小蓝色监视器(称为“显示所选控制台”)选择该实例,然后单击“停止”按钮。

答案 3 :(得分:1)

一个选项是更改程序的行为,以便在窗口关闭时实际退出(默认行为或Java中的框架。

Frame javadoc指定它可以生成WindowClosing事件,您可以使用它来触发应用程序关闭(使用像@Pratik这样的类在他们的答案中)。

在我看来,更好的解决方案是使用JFrame替换您的框架并使用它的方法f.setDefaultCloseOperation(EXIT_ON_CLOSE),以便在窗口关闭时使用exit进行应用。编写JFrame使得它应该是awt.Frame的替代品,但它是swing工具包的一部分。