22.08.12-쓰레드(Thread), JSON읽기
Thread
쓰레드란? 하나의 프로세스내에 독립적으로 실행될 수 있는 세부실행 단위
,%20JSON%E1%84%8B%E1%85%B5%E1%86%B0%E1%84%80%E1%85%B5%20032bb03873004333bc2607b544dbd5e3/Untitled.png)
Java는 스레드 기반으로 동작한다.
스레드를 정의하지 않더라도 기본적으로 일명’프로그램의 실행부’라 불리는 단위가 main스레드
메인 스레드는 개발자가 정의할 수 있는 스레드가 아닌 시스템에서 이미 지원하는 특별한 스레드
메인스레드는 대기,정지 상태로 만들면 안된다. → 무한루프와 같은 것을 하면 안된다.
메인스레드는 GUI프로그램을 운영하는 업무를 해야하기 때문(이벤트감지, 그래픽처리)
예시코드
package javaseapp0812.thread; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JProgressBar; public class ProgressApp extends JFrame { JProgressBar bar; JButton bt; int n = 0; public ProgressApp() { bar = new JProgressBar(); bt = new JButton("download"); // style bar.setPreferredSize(new Dimension(380, 50)); // 배치 관리자 적용 setLayout(new FlowLayout()); // 조립 add(bar); add(bt); setSize(400, 300); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); bt.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { -----------------------이부분--------------------------- while (true) { addValue(); try { Thread.sleep(100); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } }); } public void addValue() { bar.setValue(n++); } public static void main(String[] args) { // int[] arr = {1,2,3}; // System.out.println(arr[4]); new ProgressApp(); } }
Java에서 Json읽기
코드
package javaseapp0812.thread; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Image; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.net.URL; import javax.imageio.ImageIO; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; public class Gallery extends JFrame { JPanel p_controller; JPanel p_content; JButton bt_prev,bt_next,bt_auto; Image image;//자바에서 이미지를 표현한 객체이고, 이미지 인스턴스를 얻는 방법은 상당히 다양하다 // URL url; public Gallery() {
p_controller = new JPanel();
loadImage();
p_content = new JPanel(){//내부익명클래스
/*개발자가 컴포넌트를 그냥 사용하면 sun에서 정해놓은 그림을 이욯하게 되는데
* 개발자가 커스터마이징도 할 수 있는데 이때 오버라이드 해야할 메서드가
* paint()이다.*/
//아래의 메서드를 재정의하는 순간부터는 개발자가 그린 그림을 우선시해준다.
//paint() 호출시점은 다시 그려져야 할때
public void paint(Graphics g) {
System.out.println("내그림");
g.drawImage(image, 0, 0, 600, 500, p_controller);
}
};
bt_prev = new JButton("이전");
bt_next = new JButton("다음");
bt_auto = new JButton("auto");
//스타일
p_controller.setPreferredSize(new Dimension(600,50));
p_controller.setBackground(Color.CYAN);
p_content.setPreferredSize(new Dimension(600,500));
p_content.setBackground(Color.YELLOW);
setLayout(new FlowLayout());
p_controller.add(bt_prev);
p_controller.add(bt_next);
p_controller.add(bt_auto);
add(p_controller);
add(p_content);
//윈도우 속성
setLocationRelativeTo(null);//화면 가운데로 윈도우가 하나라 중앙에 위치
setSize(600,550);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void loadImage() {
//json 로컬 파일로부터 이미지 정보를 얻어와 image객체생성하기
//data.json이 패키지 경로에 있을때 파일을 접근하는 방법
// URL url = this.getClass().getResource("/javaseapp0812/res/data.json");//일반파일인 경우에는 패키지는 .대신 /로 한다.
File file = new File("D:/LSC/javaSE_workspace/javaseapp0812/data/data.json");
FileReader reader = null;
try {
reader = new FileReader(file);
JSONParser jsonParser = new JSONParser();
//파싱한 결과는 string 문서로 존재하던 json파일을 읽어들여 json 객체화시킨것
//{}--> JSON.parse()와 동일...(javascript)
JSONObject jsonObject=(JSONObject) jsonParser.parse(reader); //json을 해석 시도
JSONArray jsonArray=(JSONArray)jsonObject.get("marvel");//key값으로 데이터 접근
JSONObject movieJson=(JSONObject)jsonArray.get(1);//배열의 0번째 요소 접근
System.out.println(movieJson.get("url"));
URL url = new URL((String)movieJson.get("url"));
image = ImageIO.read(url);
} catch (IOException | ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(reader!=null) {
try {
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
// try {
// url= new URL("https://images-na.ssl-images-amazon.com/images/I/91qvAndeVYL._RI_.jpg");
// image=ImageIO.read(url);
// } catch (MalformedURLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
}
public static void main(String[] args) {
new Gallery();
}
}
```'Program > JAVA' 카테고리의 다른 글
| 스트림 정의, 파일 다루기 (0) | 2022.12.25 |
|---|---|
| 스트림 (0) | 2022.12.25 |
| Collection FrameWork, 쓰레드 (0) | 2022.12.25 |
| JAVA 실행 과정의 이해 (0) | 2022.12.25 |
| 개발 분야, CMD에서 JAVA 실행, GUI (0) | 2022.12.25 |