私はうまく動作する小さなプログラムを作成しました。その後、GUI を追加する必要があったため、NetBeans を使用してすべてのコードを移植し、作業を少し簡単にしました。jpgを使用するとうまく機能しますが、明らかにそれは使用するのに最適な形式ではありません. 以前は png を使用していたときは問題なく動作していましたが、今ではコンソールに大きなエラー リストが表示されるようになりました。基本的に、プログラムはユーザーが選択したファイルをバッファリングされたイメージとして読み取り、GUI のラベルを選択したファイルとして設定するか、GUI を作成するまでそれを行いました。私が言っているように、jpgで問題なく動作するので、問題はまったくないので、何が起こっているのかよくわかりません. また、ファイルパスと bufferedimage 変数をコンソールに出力するので、 bufferedimage の罰金としてそれを読み取るので、それらの両方が正常であることを確認できます。次に、次のようなエラーの大きなリストが表示されます。
スレッド「AWT-EventQueue-0」での例外 java.lang.ClassCastException: [java.awt.image.ColorModel で java.awt.image.ColorModel.getAlpha(ColorModel.java:833) で [B にキャストできません。 getRGB(ColorModel.java:878) で sun.awt.image.ImageRepresentation.convertToRGB(ImageRepresentation.java:305) で sun.awt.image.ImageRepresentation.setPixels(ImageRepresentation.java:564) で java.awt.image.AreaAveragingScaleFilter .accumPixels(AreaAveragingScaleFilter.java:213) at java.awt.image.AreaAveragingScaleFilter.setPixels(AreaAveragingScaleFilter.java:252) sun.awt.image.OffScreenImageSource.sendPixels(OffScreenImageSource.java:102) at sun.awt.image. OffScreenImageSource.produce(OffScreenImageSource.java:187) at sun.awt.image.OffScreenImageSource.addConsumer(OffScreenImageSource.java:66) at sun.awt.image.OffScreenImageSource.startProduction(OffScreenImageSource.java:80) で java.awt.image.FilteredImageSource.startProduction(FilteredImageSource.java:183) で sun.awt.image.ImageRepresentation.startProduction(ImageRepresentation.java:727) で sun.awt .image.ImageRepresentation.drawToBufImage(ImageRepresentation.java:802) で sun.java2d.pipe.DrawImage.copyImage(DrawImage.java:1018) で、sun.java2d.pipe.ValidatePipe.copyImage(ValidatePipe.java:186) で。 java2d.SunGraphics2D.drawImage(SunGraphics2D.java:3084) で sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:3069) で javax.swing.ImageIcon.paintIcon(ImageIcon.java:413) で sun.swing.plaf.synth .SynthIcon.paintIcon(SynthIcon.java:67) で javax.swing.plaf.synth.SynthGraphicsUtils.paintText(SynthGraphicsUtils.java:396) で javax.swing.plaf.synth.SynthLabelUI.paint(SynthLabelUI.java:213) で javax.swing.plaf.synth.SynthLabelUI.update(SynthLabelUI.java:177) で javax.swing.JComponent.paintComponent(JComponent.java:778) で javax.swing.JComponent で.paint(JComponent.java:1054) で javax.swing.JComponent.paintChildren(JComponent.java:887) で javax.swing.JComponent.paint(JComponent.java:1063) で javax.swing.JComponent.paintToOffscreen(JComponent. java:5221) で javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1512) で javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1443) で javax.swing.RepaintManager.paint(RepaintManager.java) :1236) で javax.swing.JComponent._paintImmediately(JComponent.java:5169) で javax.swing.JComponent.paintImmediately(JComponent.java:4980) で javax.swing.RepaintManager$3.run(RepaintManager.java:796) at javax.swing.RepaintManager$3.run(RepaintManager.java:784) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java: 76) javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:784) で javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:757) で javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:706) で javax. swing.RepaintManager.access$1000(RepaintManager.java:62) で javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1651) で java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) で java. awt.EventQueue.dispatchEventImpl(EventQueue.java:727) で java.awt.EventQueue.access$200(EventQueue.java:103) で java.awt.EventQueue$3.run(EventQueue.java:688) で java.awt.EventQueue$3.run(EventQueue.java:686) で java.security.AccessController.doPrivileged(ネイティブ メソッド) で java.security.ProtectionDomain$1.doIntersectionPrivilege で(ProtectionDomain.java:76) java.awt.EventQueue.dispatchEvent(EventQueue.java:697) で java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) で java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java: 161) java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)で java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)で java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)で java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)でawt.EventDispatchThread.run(EventDispatchThread.java:91)688) java.awt.EventQueue$3.run(EventQueue.java:686) で java.security.AccessController.doPrivileged(Native Method) で java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) で java.awt .EventQueue.dispatchEvent(EventQueue.java:697) で java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) で java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) で java.awt.EventDispatchThread.pumpEventsForHierarchy( EventDispatchThread.java:150) で java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) で java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) で java.awt.EventDispatchThread.run(EventDispatchThread.java:91) で)688) java.awt.EventQueue$3.run(EventQueue.java:686) で java.security.AccessController.doPrivileged(Native Method) で java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) で java.awt .EventQueue.dispatchEvent(EventQueue.java:697) で java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) で java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) で java.awt.EventDispatchThread.pumpEventsForHierarchy( EventDispatchThread.java:150) で java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) で java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) で java.awt.EventDispatchThread.run(EventDispatchThread.java:91) で)java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) の doPrivileged(ネイティブ メソッド) java.awt.EventQueue.dispatchEvent(EventQueue.java:697) の) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) で java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) で java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) で java.awt で.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) で java.awt.EventDispatchThread.run(EventDispatchThread.java:91)java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) の doPrivileged(ネイティブ メソッド) java.awt.EventQueue.dispatchEvent(EventQueue.java:697) の) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) で java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) で java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) で java.awt で.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) で java.awt.EventDispatchThread.run(EventDispatchThread.java:91)697) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) で java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) で java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) でawt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) で java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) で java.awt.EventDispatchThread.run(EventDispatchThread.java:91) で697) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) で java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) で java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) でawt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) で java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) で java.awt.EventDispatchThread.run(EventDispatchThread.java:91) でjava.awt.EventDispatchThread.run(EventDispatchThread.java:91) の EventDispatchThread.pumpEvents(EventDispatchThread.java:138)java.awt.EventDispatchThread.run(EventDispatchThread.java:91) の EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
アイコンをロードするための私のコードは次のとおりです。
image1 = ImageIO.read(file);
ImageIcon imageIcon1 = new ImageIcon(image1);
Image redInput = imageIcon1.getImage().getScaledInstance(300, 300, Image.SCALE_SMOOTH);
imageIcon1.setImage(redInput);
redLabel.setIcon(imageIcon1);
という名前のクラスが 1 つしかありませんNewJFrame
。