导出时KeyListener不起作用

时间:2016-06-14 22:05:18

标签: java swing file export keylistener

我刚刚编写了一个Java程序(下面的代码)。它意味着成为一个屏幕保护程序。当我在eclipse中运行代码时,一切都很完美,只要单击一个键或单击鼠标,程序就会关闭。但是当我将它导出为.jar文件时,这个函数有时会起作用,但大部分时间它都没有?!这是为什么?

public class fullscreen extends JPanel implements MouseListener, MouseMotionListener, KeyListener {

public fullscreen() {
    addMouseListener(this);
    addMouseMotionListener(this);
    addKeyListener(this);
    setFocusable(true);
}



public static void main(String[] args) {
    // TODO Auto-generated method stub
    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (ClassNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (InstantiationException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (IllegalAccessException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (UnsupportedLookAndFeelException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    System.out.println(System.getProperty("java.io.tmpdir"));

    BufferedImage cursorImg = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB);

    // Create a new blank cursor.
    Cursor blankCursor = Toolkit.getDefaultToolkit().createCustomCursor(
        cursorImg, new Point(0, 0), "blank cursor");



    BorderLayout bL = new BorderLayout();
    String text = new String();

    // create JFrame
    JFrame myframe = new JFrame();
    myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    myframe.setUndecorated(true);
    myframe.setResizable(false);
    myframe.setLayout(bL);  
    myframe.setExtendedState(JFrame.MAXIMIZED_BOTH);
    myframe.setBackground(new Color(144,132,118));
    myframe.getContentPane().setBackground(new Color(144,132,118));
    myframe.validate();
    myframe.setVisible(true);
    // Set the blank cursor to the JFrame.
    myframe.getContentPane().setCursor(blankCursor);
    fullscreen fs = new fullscreen();
    fs.setOpaque(false);

    myframe.getContentPane().add(fs);
    GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(myframe);

    //set font and size
    Font myfont = new Font("Space Colony", Font.PLAIN, 40);


    //get temp path and add the customer.txt
    String tempPath = new String(System.getProperty("java.io.tmpdir"));
    String finalPath = tempPath += "customer.txt";

    System.out.println(finalPath);

    //Dateipfad ersetzen mit dem Pfad, wo die txt Datei liegt.
    File aFile = new File(finalPath);


    //create Label and add to JFrame
    JLabel label = new JLabel("Loading Text...");
    label.setForeground(Color.white);
    label.setFont(myfont);
    label.setBackground(Color.black);
    label.setHorizontalAlignment(SwingConstants.CENTER);
    myframe.add(label, BorderLayout.CENTER);


    try{ Scanner scanner = new Scanner(aFile);
    text = scanner.nextLine();
    System.out.println(text);
    label.setText("Herzlich Willkommen " + text + "!");
    scanner.close();
}catch (Exception e){

     label.setText("Herzlich Willkommen!");
}

}

@Override
public void mouseDragged(MouseEvent e) {
    // TODO Auto-generated method stub
    System.out.println("dragged");
}

@Override
public void mouseMoved(MouseEvent e) {
    // TODO Auto-generated method stub



}

@Override
public void mouseClicked(MouseEvent e) {
    // TODO Auto-generated method stub
    String tempPath = new String(System.getProperty("java.io.tmpdir"));
    String finalPath = tempPath += "customer.txt";

    File filledFile = new File(finalPath);
    try {
        PrintWriter writer = new PrintWriter(filledFile);
        writer.print("");
        writer.close();
        System.out.println("geleert");

    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        System.out.print("Hier");
        e1.printStackTrace();
    }
    System.out.println("klick!");
    System.exit(0);
}

@Override
public void mousePressed(MouseEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
    // TODO Auto-generated method stub

}



@Override
public void keyPressed(KeyEvent e) {
    // TODO Auto-generated method stub
    String tempPath = new String(System.getProperty("java.io.tmpdir"));
    String finalPath = tempPath += "customer.txt";


    File filledFile = new File(finalPath);
    try {
        PrintWriter writer = new PrintWriter(filledFile);
        writer.print("");
        writer.close();
        System.out.println("geleert");

    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        System.out.print("Hier");
        e1.printStackTrace();
    }

    System.exit(0);
}



@Override
public void keyReleased(KeyEvent e) {
    // TODO Auto-generated method stub

}



@Override
public void keyTyped(KeyEvent e) {
    // TODO Auto-generated method stub
    System.out.println("typed");
}


}

1 个答案:

答案 0 :(得分:0)

我通过更改第一行来实现它!实际上我不知道为什么会产生巨大的差异,但它现在完美无缺。 所以现在我有:

public class fullscreen extends JFrame implements MouseListener, MouseMotionListener, KeyListener {

public fullscreen() {
addMouseListener(this);
addMouseMotionListener(this);
addKeyListener(this);
setFocusable(true);
}

当然会改变

JFrame myframe = new JFrame();

到:

fullscreen myframe = new fullscreen();

并删除全屏是添加到框架中的Panel的部分。

相关问题