수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

수업시간에 배운 소스를 활용해서 자습을 하고있는데 잘 모르겠어서 질문합니다

헛매질

2023.04.01

자바 초보가 질문합니다~아래 소스는 학교에서 교수님과 수업시간에 만들어본 프로그램입니다여기에서 제가 인터넷에서 찾아보면서 인터넷 홈페이지에서 그림을 다운받고, 다운받은 그림중에서 랜덤으로 한 개의 그림을 배경화면으로 보여주게까지는 했습니다그런데 이렇게 만들고보니 프로그램을 실행할때마다 그림을 한개씩 다운 받게만들었는데, 그 홈페이지에 있는 그림을 전부 한꺼번에 다운을 받을 수 있는 방법이 없나해서 질문하게되었습니다.다시 말해 파일 한개를 가져오는것이 아닌, 폴더를 통째로 가져온다는 것인데 이렇게 할려면 명령어부터 다시 써야되는데 어떤 명령어를 써야될지 모르겠네요알았어도 오류뜨고 난리도 아니었겠지만 오류뜨는건 제가 한번 알아서 해볼려고합니다
String imageUrl = (http://palankr.com.ne.kr/img/pho+rand.nextInt(44)+.jpg);String destinationFile = pic/BGimage+rand.nextInt(30)+.jpg;이 부분이 가장 중요한 부분이지 싶긴한데 저의 짧은 지식으로는(수업으로 배운거 이외에는 인터넷으로 간간히 찾아보는게 다입니다;) 찾는것이 너무 힘들더라구요..ㅜㅠ
일단 아래에 제가 교수님하고 같이 만들고 저도 조금 수정을 가한 소스를 올려봅니다완전한 정답을 원하는건 아니고 그냥 이런 소스를 사용하시면 됩니다 이런 정도의 답만 주셔도 감사히 배우겠습니다~^^
import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.DefaultTableModel;
import java.util.*; // Random
import javax.sound.sampled.*;import java.io.*;import java.net.URL;public class JPuzzle extends JFrame implements ActionListener, ItemListener {// 필드int count=0; // 클릭 횟수int man=0; // 러닝맨 그림순서int timer=0; // 경과시간int N=3; // N의 초기값 지정(퍼즐 크기)int[][] piece = new int[N][N]; // 그림조각 번호 기억JLabel status; // 상단의 제목 & 상태(카운트 등)boolean showNum=true; // 번호를 보여줄 것인지 유무boolean soundOk=true; // 소리 들려주기boolean running=false; // 시작여부JCheckBox chkNumber; // 번호 체크박스JCheckBox chkSound; // 소리 체크박스JButton btnStart; // 시작버튼JButton btnFinish; // 종료버튼JButton btnImage; // 그림버튼JButton btnCount; // 카운트 버튼JButton btnTimer; // 시간 버튼Choice chcSize; // 게임 크기 (가로 & 세로)ImageIcon icnImage; // 메인 그림을 담는 아이콘String userName=Lee; // 사용자 이름(아이디)Clip ClipBgm=null; // 배경음악Random rand = new Random();// 생성자public JPuzzle() { // userName = JOptionPane.showInputDialog(this, 이름을 입력하세요); try { randomImageExtraction();} catch (Exception e) { e.printStackTrace();} frameSetup(); // 화면 디자인 getConfig(); //pieceSetup(); new RunningMan().start(); // 걸어가는 매니메이션 new Timer().start(); // 카운터 보여주기 }// 메소드public void frameSetup() { // 기본 설정 Container contentPane = getContentPane(); setTitle(JJ PUZZLE v0.9 [+ userName +] ); setDefaultCloseOperation(EXIT_ON_CLOSE); contentPane.setLayout(new BorderLayout()); setMinimumSize(new Dimension(700,500)); setMaximumSize(new Dimension(800,600)); // 버튼 패널 (SOUTH) JPanel btnPanel = new JPanel(); // 버튼을 붙일 작은패널 chcSize=new Choice(); for (int i=3; i=9; i++) chcSize.add(i+×+i); chcSize.addItemListener(this); btnPanel.add(chcSize); chkNumber = new JCheckBox(번호); chkNumber.setSelected(true); chkNumber.addItemListener(this); btnPanel.add(chkNumber); chkSound = new JCheckBox(소리); chkSound.setSelected(false); chkSound.addItemListener(this); btnPanel.add(chkSound); btnTimer = new JButton(String.format(%03d time, timer)); btnTimer.setEnabled(false); btnCount = new JButton(String.format(%03d count, count)); btnCount.setEnabled(false); btnImage = new JButton(그림); btnStart = new JButton(시작); btnFinish= new JButton(종료); btnPanel.add(btnTimer); btnPanel.add(btnCount); btnPanel.add(btnImage); btnPanel.add(btnStart); btnPanel.add(btnFinish); btnTimer.addActionListener(this); btnCount.addActionListener(this); btnImage.addActionListener(this); btnStart.addActionListener(this); btnFinish.addActionListener(this); btnPanel.setBorder(BorderFactory.createRaisedBevelBorder()); contentPane.add(btnPanel, BorderLayout.SOUTH); // 제목(상태) 패널 (NORTH) JPanel stsPanel = new JPanel(); // 제목을 붙일 작은패널 status = new JLabel(JJ Java Puzzle, Copyrights (C) 2012 Hwang, Insoo); status.setForeground(Color.BLUE); status.setFont(new Font(Arial, Font.BOLD, 14)); stsPanel.add(status); stsPanel.setBorder(BorderFactory.createRaisedBevelBorder()); contentPane.add(stsPanel, BorderLayout.NORTH); // 메인 패널 (CENTER) MainPanel imgPanel = new MainPanel(); imgPanel.setBackground(Color.WHITE); imgPanel.addMouseListener(new MainMouseListener()); imgPanel.setBorder(BorderFactory.createRaisedBevelBorder()); contentPane.add(imgPanel, BorderLayout.CENTER); // 프레임 추가설정 setSize(600, 450); setLocation(200, 100); setVisible(true);}// 환경설정 읽어오기public void getConfig() { try { InputStream is = new FileInputStream(Puzzle.properties); Properties props = new Properties(); props.load(is); // 퍼즐크기 (Integer.parseInt() - ()안에 있는 것을 Int 문자로 변경해줌 N=Integer.parseInt(props.getProperty(N)); chcSize.select(N+×+N); pieceSetup(); // 창의 크기 int w=Integer.parseInt(props.getProperty(width)); int h=Integer.parseInt(props.getProperty(hight)); setSize(w, h); // 창의 위치 int l=Integer.parseInt(props.getProperty(left)); int t=Integer.parseInt(props.getProperty(top)); setLocation(l, t); // 파일 닫기 is.close(); } catch(Exception ex) { System.err.println(에러났습니다!); }}// 환경설정 저장하기public void setConfig() { try { OutputStream os = new FileOutputStream(Puzzle.properties); Properties props = new Properties(); // 퍼즐 크기 props.setProperty(N, N+); // 창 크기 Dimension framesize=this.getSize(); props.setProperty(width, framesize.width + ); props.setProperty(height, framesize.height + ); // 창의 위치 Point location = this.getLocation(); props.setProperty(left, location.x + ); props.setProperty(top, location.y + ); props.store(os, JJ Puzzle); os.close(); } catch(Exception ex) { System.err.println(프로퍼티 파일 쓰기 오류 !!); }}// 그림조각의 번호를 배열에 저장public void pieceSetup() { piece=new int[N][N]; // 새로운 배열 생성 for (int row=0; rowN; row++) for (int col=0; colN; col++) piece[row][col] = row * N + col;}public void pieceMove(int row, int col) { if (col 0 && piece[row][col-1] == N*N-1) { // 좌측 piece[row][col-1] = piece[row][col]; piece[row][col]=N*N-1; count++; } else if (col N-1 && piece[row][col+1] == N*N-1) { // 우측 piece[row][col+1] = piece[row][col]; piece[row][col]=N*N-1; count++; } else if (row 0 && piece[row-1][col] == N*N-1) { // 상 piece[row-1][col] = piece[row][col]; piece[row][col]=N*N-1; count++; } else if (row N-1 && piece[row+1][col] == N*N-1) { // 상 piece[row+1][col] = piece[row][col]; piece[row][col]=N*N-1; count++; } btnCount.setText(String.format(%03d, count)); if (finished()) { running=false; } repaint();}public boolean finished() { boolean finish=true; for (int row=0; rowN; row++) for (int col=0; colN; col++) if (piece[row][col] != row*N + col) finish=false; return finish;}public void playSound(String soundFile) { if (soundOk) { try { AudioInputStream ais = AudioSystem.getAudioInputStream(new File(soundFile)); Clip clip = AudioSystem.getClip(); clip.open(ais); clip.start(); } catch(Exception e) { System.out.println(e.toString()); } }}// 백그라운드 음악public void playBGmusic() { Random randsound=new Random(); File dir=new File(bgm); File[] files=dir.listFiles(); String file=bgm/ + files[randsound.nextInt(files.length)].getName(); try { AudioInputStream bgais=AudioSystem.getAudioInputStream(new File(file)); ClipBgm=AudioSystem.getClip(); ClipBgm.open(bgais); } catch(Exception ex) { ex.printStackTrace(); }}// 액션 이벤트 처리public void actionPerformed(ActionEvent e) { Object obj=e.getSource(); if (obj == btnFinish) { int confirm=JOptionPane.showConfirmDialog(this, 게임을 종료할까요?, 게임종료, JOptionPane.YES_NO_OPTION); if (confirm==JOptionPane.YES_OPTION) { setConfig(); // 환경설정 저장 System.exit(0); } } else if (obj==btnStart) { if (btnStart.getText().equals(시작)) { for (int i=0; i1000*N*N; i++) { int row = rand.nextInt(N); int col = rand.nextInt(N); pieceMove(row, col); count=0; timer=5*N*N; running=true; } btnStart.setText(그만하기); } else if (btnStart.getText().equals(그만하기)) { running=false; btnStart.setText(시작); pieceSetup(); count=0; } } else if (obj==btnImage) { // 그림 버튼을 클릭한 경우 JFileChooser chooser=new JFileChooser(); chooser.setCurrentDirectory(new File(pic)); int result=chooser.showOpenDialog(this); if (result == 0) { // 정상적으로 파일을 선택한 경우 File file=chooser.getSelectedFile(); String path=file.getAbsolutePath(); icnImage=new ImageIcon(path); } } repaint();}// 아이템 이벤트 처리public void itemStateChanged(ItemEvent e) { Object obj=e.getSource(); if (obj == chkNumber) { JCheckBox chkNumber = (JCheckBox) e.getItem(); if (chkNumber.isSelected()) showNum = true; else showNum = false; } else if (obj == chkSound) { JCheckBox chkSound = (JCheckBox) e.getItem(); if (chkSound.isSelected()) { soundOk = true; playBGmusic(); ClipBgm.loop(Clip.LOOP_CONTINUOUSLY); } else { soundOk = false; try { ClipBgm.stop(); } catch(Exception ex) { System.out.println(ex.toString()); } } } else if (obj == chcSize) { N=chcSize.getSelectedIndex() + 3; pieceSetup(); // 바뀐 크기로 다시 설정 } repaint();} public void randomImageExtraction() throws Exception { Random rand = new Random(); String imageUrl = (http://palankr.com.ne.kr/img/pho+randho+rand.nextInt(44)+.jpg); String destinationFile = pic/BGimage+rand.nextInt(30)+.jpg; saveImage(imageUrl, destinationFile); URL url = new URL(imageUrl); InputStream is = url.openStream(); OutputStream os = new FileOutputStream(destinationFile); byte[] b = new byte[2048]; int length; while ((length = is.read(b)) != -1) { os.write(b, 0, length); } is.close(); os.close(); } public static void saveImage(String imageUrl, String destinationFile) throws IOException { URL url = new URL(imageUrl); InputStream is = url.openStream(); OutputStream os = new FileOutputStream(destinationFile); byte[] b = new byte[2048]; int length; while ((length = is.read(b)) != -1) { os.write(b, 0, length); } is.close(); os.close(); }// 내부 클래스class MainPanel extends JPanel { ImageIcon run = new ImageIcon(images/man.jpg); // 생성자 public MainPanel() { File dir = new File(pic); File[] files = dir.listFiles(); icnImage = new ImageIcon(pic/+files[rand.nextInt(files.length)].getName()); } // 메소드 public void paintComponent(Graphics g) { super.paintComponent(g); int winX = this.getWidth()/N; int winY = this.getHeight()/N; for (int row=0; rowN; row++) for (int col=0; colN; col++) { int imgX = piece[row][col] % N * icnImage.getIconWidth()/N; int imgY = piece[row][col] / N * icnImage.getIconHeight()/N; if (piece[row][col] N*N-1 || !running) g.drawImage(icnImage.getImage(), col*winX, row*winY, (col+1)*winX-1, (row+1)*winY-1, imgX, imgY, imgX+icnImage.getIconWidth()/N-1, imgY+icnImage.getIconHeight()/N-1, this); else { g.drawImage(run.getImage(), col*winX+this.getWidth()/N/2-run.getIconWidth()/4/2, row*winY+this.getHeight()/N/2-run.getIconHeight()/2, col*winX+this.getWidth()/N/2+run.getIconWidth()/4/2, row*winY+this.getHeight()/N/2+run.getIconHeight()/2, man * run.getIconWidth()/4, 0, (man+1)*run.getIconWidth()/4, run.getIconHeight(), this); g.setFont(new Font(굴림, 0, 10)); g.setColor(Color.BLACK); g.drawString(userName, col*winX+this.getWidth()/(N*2)-userName.length()*3, row*winY+this.getHeight()/(N*2)+25); } if (showNum) { g.setFont(new Font(Arial, Font.BOLD, 15)); g.setColor(Color.black); g.drawString(piece[row][col]+1+, col*winX+3, row*winY+13); } } // g.drawImage(img.getImage(), 0, 0, getWidth(), getHeight(), this); } }// 걸어가는 캐릭터class RunningMan extends Thread { public void run() { do { // man = ++man & 4; // 아래와 같은 의미; man++; man = man % 4; try { sleep(500); // 500mSec 쉬어라 } catch (InterruptedException e) { System.out.println(e.toString()); } userName = userName.substring(1) + userName.substring(0,1); repaint(); } while(true); }}class Timer extends Thread { public void run() { do { try { sleep(1000); // 1000mSec 쉬어라 } catch (InterruptedException e) { System.out.println(e.toString()); } if (running) btnTimer.setText(String.format(%03d time, --timer)); if (timer=0) { running=false; btnStart.setText(시작); pieceSetup(); } repaint(); } while(true); }}class MainMouseListener implements MouseListener { public void mousePressed(MouseEvent e) { int col = e.getX() / (e.getComponent().getWidth()/N); int row = e.getY() / (e.getComponent().getHeight()/N); if (running) { pieceMove(row, col); // row & col 위치의 값을 상하좌우의 // 공백으로 이동시킴 playSound(sound/tting.wav); } } public void mouseReleased(MouseEvent e) { } public void mouseClicked(MouseEvent e) { int col = e.getX() / (e.getComponent().getWidth()/N); int row = e.getY() / (e.getComponent().getHeight()/N); if (running) pieceMove(row, col); // row & col 위치의 값을 상하좌우의 // 공백으로 이동시킴 } public void mouseEntmouseEntered(MouseEvent e) { } public void mouseExited (MouseEvent e) { }}// 메인 메소드public static void main(String[] args) { new JPuzzle();}}

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

  • 희1미햬

    그러니까 그냥 이미지만 다운 받으면 되는거네요.
    zip 파일로 압축해서 올려진 파일을 다운받아 압축 풀어서 사용하거나
    각각의 다운받을 이미지 파일의 목록을 가지고 하나 하나 일일히 받으세요.

    추천하는 방법은 이미지 파일의 웹 경로를 텍스트 파일에 적어 웹에 올립니다.
    프로그램을 실행할때 위의 텍스트 파일을 다운로드합니다.
    그리고 텍스트 파일의 경로를 보고 이미지 파일을 모두 다운로드합니다.

  • 피어나

    위 소스를 사용하면 특정 홈페이지에 있는 그림을 하나씩 다운로드 받는건 가능하더라구요
    그런데 그 홈페이지에 있는 모든 그림을 전부 다운로드하는 방법은 잘 모르겠습니다
    제가 이 소스가 어떤 원리인지 이해하고 사용한게 아니라서 다운로드 가속프로그램 뭐 그런거 잘 이해가 안됩니다
    그냥 인터넷에서 소스 찾아보고 사용해보고 이렇게하면 아 이렇게 되는구나 이 소스는 이렇게 쓰면 되겠네 그냥 이렇게 하면서 배우고 있거든요;;
    말이 길었는데 결론은 답변하신 말씀 제가

  • 도도

    public static void saveImage(String imageUrl, String destinationFile) throws IOException {
    URL url = new URL(imageUrl);
    InputStream is = url.openStream();
    OutputStream os = new FileOutputStream(destinationFile);
    byte[] b = new byte[2048];
    int length;
    whil

  • 피네

    제가 잘 이해를 못한건가싶은데 그냥 그 홈페이지에 있는 그림 전체를 가져올려고하면 이미지 파일을 서버에 저장해놨다가 받으면 된다는 말이신거같은데 그걸 어떻게 하는지 잘 모르겠습니다

  • 플랜

    그래서 질문이 뭔가요?
    질문하고 소스가 따로 놀고 있습니다.

    제가 볼때는 인터넷에서 파일을 다운 받아서 실행하는 게임을 만들려고 하시는 것 같은데
    질문은 홈페이지를 다운로드하거나, 다운로드 가속 프로그램을 만들려고 하시는 것 같네요.
    후자의 경우는 알고리즘을 만들어야 하는 것이고,
    전자라면 이미지 파일만 서버에 저장해놨다가 받으면 되겠네요. 맞나요?
    폴더 체로 다운 받는 방식은 ftp 파일 서버를 말하는 건데 불필요하게 큽니다.

    이미지 파일 목록가지

번호 제 목 글쓴이 날짜
2699380 메뉴가 계단식으로 나타나요.. ㅠ.ㅠ (5) 스릉흔다 2025-06-25
2699354 영문 웹폰트 관련 질문입니다!!! (1) 치킨마루 2025-06-25
2699329 윈도우 미디어 플레이어 URL 질문!!! (1) 제철 2025-06-25
2699296 동영상 배경 질문드려요!!!!!!!!!!!!!! 핫파랑 2025-06-24
2699214 position:fixed 에 대한 질문입니다.. (7) 사이 2025-06-24
2699183 제이쿼리 이미지 슬라이드 위치값 수정 초엘 2025-06-23
2699153 테마[ADORABLE]에서 페이지생성시 하위페이지는 2개밖에 안되나요? 흰여울 2025-06-23
2699129 네이버 블로그 또는 사이트의 글을 불러오기 갤원 2025-06-23
2699070 탭메뉴처럼 셀렉트 박스를 이용해서 내용을 출력할 수 있는 방법이 있을까요. (3) 큰꽃늘 2025-06-22
2699016 인터넷이 안되는 환경에서 validator설치방법 (3) 은송이 2025-06-22
2698988 대체 C++ 6.0 exe 아이콘은 어떻게 넣는건가요? 외국녀 2025-06-22
2698960 음성파일을 embed로 작업했는데..웹 표준코딩으로 변경하려면 어떻게 해야하나요? (1) 잎새 2025-06-21
2698932 메뉴목록 풍선창 만들기 html (2) 하늘이 2025-06-21
2698901 http://www.zeitgeistbot.com/ 이 사이트처럼 움직이는 효과를 무엇이라고 하나요? 누림 2025-06-21
2698876 table width값 크로스브라우징에 대한 문의 (2) 볼수록매력 2025-06-21
2698849 c언어 질문. (3) 아름나 2025-06-20
2698823 setInterval 이벤트 제거 하려면... 가온길 2025-06-20
2698796 이 오류를 이해를 못하겠어요 Addicted 2025-06-20
2698712 IF 문 이 계속 오류가 나요 (2) 옆집오빠야 2025-06-19
2698687 이미지를 클릭하면 그 이미지를 다운받게해주는 방법 질문요 ^^ (미해결) (5) 해지개 2025-06-19
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com