본문 바로가기

Program/JAVA

쓰레드(Thread), JSON읽기

22.08.12-쓰레드(Thread), JSON읽기

Thread


쓰레드란? 하나의 프로세스내에 독립적으로 실행될 수 있는 세부실행 단위

Java는 스레드 기반으로 동작한다.

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