我遇到了一個小問題,我似乎無法解決某些奇怪的原因。擺動 - 無法將默認任務欄圖標更改爲自定義圖標
我很努力地理解爲什麼我的嘗試有一個自定義的任務欄圖標,而不是默認的Java標誌作爲我的程序圖標不起作用。
本質上,我的程序從一個JDesktopPane開始,它包含一個JFrame,並在JFrame上按一下按鈕,JFrame就會調用一個JInternalFrame。
從我的代碼下面你會發現這就是我試圖設置任務欄圖標:
java.net.URL resource = getClass().getClassLoader().getResource("systrayicon.jpg");
Image image = Toolkit.getDefaultToolkit().getImage(resource);
TestJDesktopPaneFrame.setIconImage(image);
你會發現,使用的getClass()getClassLoader()的getResource(「systrayicon.jpg」。 )我正在訪問imahge,我打算使用它作爲我的任務欄圖標從以下路徑文件:/ C:/Users/WorkPC/Documents/TEST/bin/systrayicon.jpg
我已經使用getClass()。getClassLoader ().getResource(「」)無數次,它對我來說很好,例如在我用來調用JInternalFrame的按鈕中,我使用getClass()。getClassLoader()。getResource(「」)來訪問按鈕的自定義圖像。
下面是我的全部代碼:
package bge.applcs.dsa;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.IOException;
import javax.swing.*;
public class TestJDesktopPane extends JDesktopPane {
public static TestJDesktopPane TestJDesktopPane;
public static JFrame TestJDesktopPaneFrame = new JFrame("");
public JButton btnJIFrame;
public TestJDesktopPane() throws IOException {
createPanel();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
showFrame();
}
});
}
public static void showFrame() {
try {
TestJDesktopPane = new TestJDesktopPane();
} catch (IOException e1) {
e1.printStackTrace();
}
TestJDesktopPaneFrame.setContentPane(TestJDesktopPane);
TestJDesktopPaneFrame.setUndecorated(true);
MoveMouseListener mml = new MoveMouseListener(TestJDesktopPane);
TestJDesktopPane.addMouseListener(mml);
TestJDesktopPane.addMouseMotionListener(mml);
TestJDesktopPaneFrame.pack();
TestJDesktopPaneFrame.setVisible(true);
TestJDesktopPaneFrame.setResizable(false);
TestJDesktopPaneFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TestJDesktopPaneFrame.setLocationRelativeTo(null);
TestJDesktopPaneFrame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
"Cancel");
TestJDesktopPaneFrame.getRootPane().getActionMap().put("Cancel", new AbstractAction(){
public void actionPerformed(ActionEvent x) {
System.exit(0);
}
});
}
public void createPanel() {
setLayout(null);
setPreferredSize(new Dimension(1000, 300));
java.net.URL resource = getClass().getClassLoader().getResource("systrayicon.jpg");
Image image = Toolkit.getDefaultToolkit().getImage(resource);
TestJDesktopPaneFrame.setIconImage(image);
// ****************************** Minimize button ******************************
// Prepare images
ImageIcon btnJIFrameNonRollover = new ImageIcon((getClass().getClassLoader().getResource("btnjiframe.jpg")));
ImageIcon btnJIFrameRollover = new ImageIcon((getClass().getClassLoader().getResource("btnjiframerollover.jpg")));
// Create custom button
btnJIFrame = new JButton(btnJIFrameNonRollover);
btnJIFrame.setBorder(null);
btnJIFrame.setContentAreaFilled(false);
btnJIFrame.setBorderPainted(false);
btnJIFrame.setFocusPainted(false);
btnJIFrame.setBounds(100,100,100,100);
btnJIFrame.setRolloverIcon(btnJIFrameRollover);
btnJIFrame.setCursor(new Cursor(Cursor.HAND_CURSOR));
btnJIFrame.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
JInternalFrame logInJIFrame = new JInternalFrame();
add(logInJIFrame);
}
});
//
add(btnJIFrame);
}
}
編輯:
我嘗試以下,但得到了一個錯誤:
//
java.net.URL resource = getClass().getClassLoader().getResource("/images/systrayicon.jpg");
Image image = Toolkit.getDefaultToolkit().getImage(resource);
signInDesktopPaneFrame.setIconImage(image);
這裏的錯誤:
Uncaught error fetching image:
java.lang.NullPointerException
at sun.awt.image.URLImageSource.getConnection(Unknown Source)
at sun.awt.image.URLImageSource.getDecoder(Unknown Source)
at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
at sun.awt.image.ImageFetcher.run(Unknown Source)
感謝任何su ggestions。
圖像移動到您的源文件夾,它會工作 –