我正在尝试使用我发现的视频中的 Ant 幻灯片放映 java。我已经进行了输出,并且出现了窗口,但没有显示任何图像。
我怀疑我做错了与我实现的 getResource 代码相关的事情。我期望 getResource("/newsimages") 能够正常工作并显示所有图像,但事实并非如此。
package pbt2mainpage;
import java.awt.Image;
import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
public final class MainPage extends javax.swing.JFrame {
public MainPage() {
initComponents();
show(position);
}
int position = 0;
public String[] takeimage()
{
File f = new File(getClass().getResource("/newsimages").getFile());
String[] Images = f.list();
return Images;
}
public void show(int index)
{
String[] Images = takeimage();
String img = Images[index];
ImageIcon icon = new ImageIcon(getClass().getResource("/newsimages/")+img);
Image image = icon.getImage().getScaledInstance(news.getHeight(), news.getWidth(), Image.SCALE_SMOOTH);
news.setIcon(new ImageIcon(image));
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
news = new javax.swing.JLabel();
next = new javax.swing.JLabel();
previous = new javax.swing.JLabel();
background = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
getContentPane().add(news, new org.netbeans.lib.awtextra.AbsoluteConstraints(45, 55, 990, 360));
next.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pbt2mainpage/next.png"))); // NOI18N
next.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
nextMousePressed(evt);
}
});
getContentPane().add(next, new org.netbeans.lib.awtextra.AbsoluteConstraints(1040, 200, -1, -1));
previous.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pbt2mainpage/previous.png"))); // NOI18N
previous.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(java.awt.event.MouseEvent evt) {
previousMousePressed(evt);
}
});
getContentPane().add(previous, new org.netbeans.lib.awtextra.AbsoluteConstraints(5, 200, -1, -1));
background.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pbt2mainpage/For CPG.jpg"))); // NOI18N
getContentPane().add(background, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, 1080, 450));
pack();
}// </editor-fold>
private void nextMousePressed(java.awt.event.MouseEvent evt) {
new Thread();
try {
Thread.sleep(300);
} catch (InterruptedException ex) {
Logger.getLogger(MainPage.class.getName()).log(Level.SEVERE, null, ex);
}
int p = this.news.getX();
if(p>-1)
{
Animacion.Animacion.mover_izquierda(900, 200, 1, 2, news);
}
position=position+1;
if(position>=takeimage().length)
{
position=takeimage().length-1;
}
show(position);
}
private void previousMousePressed(java.awt.event.MouseEvent evt) {
new Thread();
try {
Thread.sleep(300);
} catch (InterruptedException ex) {
Logger.getLogger(MainPage.class.getName()).log(Level.SEVERE, null, ex);
}
int p=this.news.getX();
if(p>-1)
{
Animacion.Animacion.mover_izquierda(900, 200, 1, 2, news);
}
position=position-1;
if(position<0)
{
position=0;
}
show(position);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(() -> {
new MainPage().setVisible(true);
});
}
// Variables declaration - do not modify
private javax.swing.JLabel background;
private javax.swing.JLabel news;
private javax.swing.JLabel next;
private javax.swing.JLabel previous;
// End of variables declaration
文件的意思是文件。这个:
new File(getClass().getResource("/newsimages").getFile());
不起作用,也无法使其起作用。因为 jar 文件中的那些条目不是文件。它们是 jar 条目。
这就是你如何做到这一点,从你自己的代码稍后在源代码中:
new ImageIcon(getClass().getResource("/newsimages/")+img);
不过,您应该使用
MainPage.class.getResource
(更好的样式;如果您子类化也不会破坏,尽管这在这里似乎不太相关)。
您的代码创建一个文件对象以列出其内容。 这不是您可以做的操作。类加载系统根本没有“列表”原语。
因此,您有几个选择:
MainPage.class.getResourceAsStream("/all-image-names.txt")
),并使用它的内容来了解哪些文件名可用。