2016-06-14 22 views
0

我剛剛編寫了一個Java程序(代碼如下)。它的目的是成爲一個屏幕保護程序。當我在eclipse中運行代碼時,一切正常,只要點擊一個鍵或點擊鼠標,程序就會關閉。但是,當我將它導出爲.jar文件時,此功能有時可以正常工作,但大多數情況下它不會?!這是爲什麼?KeyListener在導出時不起作用

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

[Oracle Java代碼約定](http://www.oracle.com/technetwork/java/codeconvtoc-136057.html) –

+0

我通常不用java代碼,只是爲了這個項目..所以可以你可能會給我一個簡短的解釋,爲什麼我有這個問題,也許是一個解決方案? –

+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(); 

,並刪除其中的全屏是一個面板添加到幀的部分。