2014-11-12 2 views
1

나는 JFramejava awt 이벤트 큐/디스패치 스레드 알 수없는 소스 오류가 있습니까?

Main 클래스를

import java.awt.*; 
import javax.swing.JFrame; 

public class main { 

    public static void main(String[] args){ 
     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setTitle("kek"); 

     f.add (new GraphicsSurface()); 

     f.setSize(512, 512); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 
} 

GraphicsSurface 클래스

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import javax.swing.JComponent; 

public class GraphicsSurface extends JComponent { 

    public GraphicsSurface() { 
    } 

    public void paint (Graphics g) { 
     int end = 0; 
     long redint = 0, greenint = 0, blueint = 0; 
     int xstart = 0, ystart = 0, xend = 0, yend = 0; 
     double y = 0, x = 0; 
     double width = 80; 
     double angle = 0; 
     double endpoint = 255; 
     double curveintensitya = 1.4, curveintensityb = -0.9; 
     double curvestarta = 30, curvestartb = 150; 
     double curvelengtha = 15, curvelengthb = 30; 
     double redvalue = 0, greenvalue = 0, bluevalue = 0; 
     while (end == 0) {   

      Graphics2D g2d = (Graphics2D) g;    
      redvalue = 100 + (y/2.56); 
      greenvalue = 50 + (y/1.28); 
      bluevalue = 200 + (y/5.12); 
      redint = Math.round(redvalue); 
      greenint = Math.round(greenvalue); 
      blueint = Math.round(bluevalue); 

      if (y >= curvestarta && y < (curvestarta + curvelengtha)) { 
       angle = angle + (curveintensitya/curvelengtha); 
      } 
      if (y >= curvestartb && y < (curvestartb + curvelengthb)) { 
       angle = angle + (curveintensityb/curvelengthb); 
      } 

      width = width + angle; 
      if (width > 512) { 
       width = 512; 
      } 
      x = Math.round(width); 
      xend = (int) x; 
      ystart = (int) y; 
      yend = ystart; 
      y = y + 1; 

      if (y > endpoint) { 
       end = 1; 
      } 

      g2d.setColor(new Color(redint, greenint, blueint, 255)); 

      g2d.drawLine(xstart, ystart, xend, yend); 
     } 
    } 
} 

를 사용하여 이미지를 만들기 위해이 코드를 실행하려하지만 콘솔이있어 :

at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 

문제의 원인과 문제를 해결하기 위해 무엇을해야하는지 알고 싶습니다.

+0

오프 토픽 : 1) 대신에 'paint()'메쏘드를 오버라이드해서는 안되고'paintComponent()'를 오버라이드해서는 안됩니다. [페인트 메커니즘에 대한 자세한 내용] (https://docs.oracle.com/javase/tutorial/uiswing/painting/closer.html)을 참조하십시오. 2) 프레임의 적절한 크기를 설정하는 대신 getPreferredSize() 메소드를 오버라이드하여 컴포넌트의 크기를 지정하십시오. 3) 이벤트 발송 스레드에서 스윙 구성 요소를 작성/업데이트해야합니다. [초기 스레드] (https://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html)를 참조하십시오. – dic19

답변

2

문제는이 라인

g2d.setColor(new Color(redint, greenint, blueint, 255)); 

redint의 유형이다, 코드에서 및 blueint 유형 long이다 greenint. 그러나 Color의 생성자는 int 또는 long 중 하나입니다. intlong에서 이러한 유형을 변경하고 적절한 캐스팅을 수행

당신은 그래서 문제에 대한 수정이 문서 here

를 참조 할 수 있습니다.