class没有实例化,使用actionlistener不起作用,单独工作

时间:2013-06-21 08:08:38

标签: java swing actionlistener instantiation awtrobot

我正在尝试制作一个屏幕截图程序。

我所拥有的是一个透明窗口,它将为其捕获区域,上面有一个按钮capture,我试图实例化一个单独的captureScreen类使用command prompt在单独的文件中执行。

我试图在按下captureScreen按钮时实例化此capture类。 但这不起作用。 当从这个文件中实例化为

时,保持captureScreen.java分离不起作用
captureScreen a = new captureScreen();

System.out.println("Start");甚至不会打印任何内容,但在从command prompt作为

运行时效果很好
java captureScreen

以下是screenrecord.java

public class screenrecord extends JFrame implements ActionListener{
    public screenrecord() {....}
    public void actionPerformed(ActionEvent e){
        if ("record".equals(e.getActionCommand())) {
            captureScreen a = new captureScreen();

            System.out.println("Donesssssss");
        } 
    }   
}

class captureScreen extends Object{

    public int captureScreen(){
        ...
        Robot robot = new Robot();
        BufferedImage image = robot.createScreenCapture(screenRectangle);

        ImageIO.write(image, "png", new File(filename));
        System.out.println("Done");
        return 1;}
        catch(AWTException ex)
        {   
            System.out.println("Error"+ex);
            return 1;
        }
        catch(IOException ex)
        {   
            System.out.println("Error"+ex);
            return 1;
        }

    }
}

2 个答案:

答案 0 :(得分:3)

public int captureScreen(){不是构造函数,它是一个方法,因此调用captureScreen a = new captureScreen()不会激活此方法。

你可以......

更改它以使其成为构造函数

public captureScreen() {...}

或者你可以......

调用方法......

captureScreen a = new captureScreen();
a.captureScreen();

现在。欢迎来到你应该关注naming conventions for the Java language的原因之一,因为如果你有...,你可以区分方法和构造函数。

ie类以大写字符CaptureScreen开头命名,这使得构造函数遵循相同的命名public CaptureScreen(){...},方法以小写字符开头。

只是说

答案 1 :(得分:0)

类captureScreen,其代码类似于

public int captureScreen(){..}

如果您将此视为构造函数,则不要使用返回类型。

public captureScreen(){..}

如果您将此视为一种方法,请尝试从actionPerformed中调用此方法。

captureScreen a = new captureScreen();
a.captureScreen();