2013-10-28 2 views
0

작은 프로그램을 만들었습니다. 그런 다음 GUI를 추가해야 NetBeans를 사용하여 모든 코드를 포팅하여 작업을 좀 더 쉽게 할 수있었습니다. Ive는 jpgs를 사용할 때 훌륭하게 작동하게 만들었지 만 사용하기에 가장 좋은 형식은 아닙니다. 전에는 잘 작동하는 PNG를 사용할 때, 전에는 결코 얻을 수 없었던 콘솔의 오류 목록을 얻었습니다. 기본적으로 프로그램은 사용자가 bufferedimage로 선택한 파일을 읽고 GUI의 레이블을 선택한 파일로 설정하거나 GUI를 만들 때까지 레이블을 설정합니다. 그것이 jpg와 함께 잘 작동한다고 말했기 때문에 아무런 문제도 발생하지 않으므로 무슨 일이 일어나고 있는지 확실하지 않습니다. 스레드에서레이블 아이콘으로 .png 사용

예외 "AWT : 그 또한 그렇게 그 둘은 다음과 같다 오류 후 큰 목록 괜찮 볼 수있는 콘솔 파일 경로 및 BufferedImage의 변수를 인쇄 메신저으로, BufferedImage 벌금으로 읽기 -EventQueue-0 "java.lang.ClassCastException : [ java.awt.image.ColorModel.getAlpha (ColorModel.java:833)의 B로 변환 할 수 없습니다. java.awt.image.ColorModel.getRGB (,691에서 sun.awt.image.ImageRepresentation.setPixels (ImageRepresentation.java:564) 에서 sun.awt.image.ImageRepresentation.convertToRGB (ImageRepresentation.java:305) 에서 ColorModel.java:878) 363,210 java.awt.image.AreaAveragingScaleFilter.accumPixels (AreaAveragingScaleFilter.java:213) java.awt.image.AreaAveragingScaleFilter.setPixels (AreaAveragingScaleFilter.java:252) sun.awt.image.OffScreenImageSource.sendPixels에서 에서 (OffScreenImageSource 된 .java : 102) 하는 sun.awt에서 sun.awt.image.OffScreenImageSource.addConsumer (OffScreenImageSource.java:66) 에서 sun.awt.image.OffScreenImageSource.produce (OffScreenImageSource.java:187) 에서 . image.OffScreenImageSource.startProduction (OffScreenImageSource.java:80) at java.awt.image.FilteredImageSource.startProduction (FilteredImageSource.java:183) sun.awt.image.ImageRepresentation.startProduction sun.java2d.pipe.DrawImage.copyImage에서 sun.awt.image.ImageRepresentation.drawToBufImage (ImageRepresentation.java:802)에서 (ImageRepresentation.java:727) 에서 91,363,210 ( sun.java2d.SunGraphics2D.drawImage에서 sun.java2d.SunGraphics2D.drawImage (SunGraphics2D.java:3084에서 sun.java2d.pipe.ValidatePipe.copyImage (ValidatePipe.java:186))에서 DrawImage.java:1018) ( javax.swing.plaf의에서 sun.swing.plaf.synth.SynthIcon.paintIcon에서 javax.swing.ImageIcon.paintIcon (ImageIcon.java:413) (SynthIcon.java:67)에서 SunGraphics2D.java:3069). synth.SynthGraphicsUtils.paintText (SynthGraphicsUtils.java:396) at javax.swing. javax.swing.plaf.synth.SynthLabelUI.update (SynthLabelUI.java:177) javax.swing.JComponent.paintComponent (JComponent.java:778)에서 plaf.synth.SynthLabelUI.paint (SynthLabelUI.java:213) 에서 javax.swing.JComponent.paint (JComponent.java:1063)에서 javax.swing.JComponent.paintChildren (JComponent.java:887)에서 javax.swing.JComponent.paint (JComponent.java:1054)에서 javax.swing.JComponent.paintToOffscreen (JComponent.java:5221) at javax.swing.RepaintManager $ PaintManager.paintDoubleBuffered (RepaintManager.java:1512) at javax.swing.RepaintManager $ PaintManager.paint (RepaintManager.java:1443)) at javax.swing.RepaintManager.paint (RepaintManager.java:1236) at javax.swing.JComponent._paintImmediately (JComponent.java:5169) at javax.swing.JComponent.paintImmediately (JComponent.java:4980) at javax.swing.RepaintManager $ 3.실행 (RepaintManager.java:796) 에서 에있는 javax.swing.RepaintManager $ 3.run (RepaintManager.java:784) java.security.AccessController.doPrivileged (네이티브 메소드) java.security.ProtectionDomain $ 1.doIntersectionPrivilege (ProtectionDomain 된 .java : javax.swing.RepaintManager.paintDirtyRegions (RepaintManager.java:784) javax.swing.RepaintManager.paintDirtyRegions (RepaintManager.java:757) javax.swing.RepaintManager.prePaintDirtyRegions에서 에서 76) (RepaintManager.java:706) at javax.swing.RepaintManager.access $ 1000 (RepaintManager.java:62) at javax.swing.RepaintManager $ ProcessingRunnable.run (RepaintManager.java:1651) at j (EventQueue.java:727) at java.awt.EventQueue.access $ 200 자바에서 java.security.AccessController.doPrivileged (기본 방법)에서 java.awt.EventQueue $의 3.run (EventQueue.java:686)에서 java.awt.EventQueue $의 3.run (EventQueue.java:688). java.awt.EventDispatchThread.pumpOneEventForFilters (EventDispatchThread.java:242) 자바에서 에서 java.awt.EventQueue.dispatchEvent (EventQueue.java:697)에서 security.ProtectionDomain $ 1.doIntersectionPrivilege (ProtectionDomain.java:76) . 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에서 691,363,210

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); 
,691 : 아이콘의 존재를로드하는 내 코드와 java.awt.EventDispatchThread.run (EventDispatchThread.java:91에서) )


NewJFrame이라는 클래스가 하나 뿐이므로 어떤 도움도 대단히 감사하겠습니다!

+0

하드에가는 – MadProgrammer

+0

그냥 자신이 생각, 게시물을 편집 – user2517280

+0

당신은 자신의 이미지를 페인트하려고합니까? PNG 예제를 제공 할 수 있습니까? – MadProgrammer

답변

0

int[] 번을 byte[] 번으로 캐스팅하려는 것 같습니다.

+0

이상한, 왜 내가 jpg 대신 png를 선택했을 때만 이런 현상이 발생하는지 알고 싶습니까? – user2517280

+1

@ user2517280 제공하신 코드를 살펴본 후에 잘 모르겠습니다. 이 문제를 일으킬 수있는 프로그램 내내 다른 코드가 없습니까? 일반적으로 다른 상충 가능한 코드가없는 경우 코드에 문제가없는 것으로 보입니다. –

1

코드에 오류가있는 것 같지 않으므로 AWT 구현을 변경할 수 없으므로이 문제를 해결하려면 시도하십시오.

BufferedImage img=ImageIO.read(file); 
Image redInput=new AffineTransformOp(
    AffineTransform.getScaleInstance(300.0/img.getWidth(), 300.0/img.getHeight()), 
    AffineTransformOp.TYPE_BICUBIC).filter(img, null); 
imageIcon1= new ImageIcon(redInput, file.toString()); 
redLabel.setIcon(imageIcon1); 

이 코드 BufferedImage의 특수 처리에 전념하는 다른 경로로 진행한다. 이 테스트에서 파일을 가지고 있지 않았으므로 동일한 버그가 발생하지 않는다는 보장은 없습니다. 그러나 나는 생각하기에 코드에 대한 변경이 다소 작기 때문에 시도해 볼 가치가 있습니다.

그건 당신이 수동으로 바로 이미 다른 사람에 의해 제안로드 한 후 색 공간을 변환을 시도 할 수 있습니다 작동하지 않는 경우 : 미안 그래 ... 몇 가지 코드없이 진단 할 수

BufferedImage img=ImageIO.read(file); 
final int w = img.getWidth(), h = img.getHeight(); 
BufferedImage bi=new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); 
bi.setRGB(0, 0, w, h, img.getRGB(0, 0, w, h, null, 0, w), 0, w); 
img=bi; 
// proceed as normally 
+0

Im이 코드가 무엇을하는지 잘 모르겠지만 사용하려고하면 모든 줄에 오류가 생길 수 있으므로 아쉽게 생각합니다! 어쨌든 고마워요 – user2517280

+0

어떤 종류의 오류가 있습니까? 'java.awt.geom.AffineTransform' 및'java.awt.image.AffineTransformOp'를 임포트해야하고, 어떤 시도도없이 포기하지 않고 * 실제로 시도해보십시오. 그리고 당신은 문서를 공부하는 개념에 익숙해 져야합니다. 위의 코드에서 사용 된 모든 클래스와 메소드는 다음에서 설명합니다. http://docs.oracle.com/javase/7/docs/api/index.html – Holger

+0

게시 한 코드가 무엇을하는지 또는 어떻게 다른지 나를 위해 완벽하게 작동하는 원래 코드로. 이 방법이 더 효과적입니까? 변수 때문에 오류가 발생했으나 지금 수정했습니다. 이전 png를 가져 오려고하면 원본 게시물에서 동일한 오류가 발생합니다. – user2517280

관련 문제