1
나는 JFrame
java 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)
문제의 원인과 문제를 해결하기 위해 무엇을해야하는지 알고 싶습니다.
오프 토픽 : 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