자바 코드 영타 연습

etc 2014. 6. 26. 17:36 |
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.Date;
import java.util.StringTokenizer;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeWillExpandListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;




class Search extends JFrame implements TreeWillExpandListener, ActionListener {
    private Container con;

    private JSplitPane sp = new JSplitPane();

    private JSplitPane sp1 = new JSplitPane(JSplitPane.VERTICAL_SPLIT);

    private DefaultMutableTreeNode root = new DefaultMutableTreeNode("My 탐색기");

    private JTree tree_jt = new JTree(root);

    private JScrollPane tree_jsp = new JScrollPane(tree_jt);

    private Vector view_vc = new Vector();

    private JList view_li = new JList(view_vc);

    private JScrollPane view_jsp = new JScrollPane(view_li);

    private JButton view_bt = new JButton("VIEW");

    private JButton edit_bt = new JButton("EDIT");

    private JButton del_bt = new JButton("DELETE");

    private JButton end_bt = new JButton("EXIT");

    private JTextArea data_ta = new JTextArea();

    private JScrollPane data_jsp = new JScrollPane(data_ta);

    private Dimension screen;

    public Search() {
        super("My 탐색기");
        screen = Toolkit.getDefaultToolkit().getScreenSize();
        this.init();
        this.start();
        this.setSize((int) screen.getWidth(), (int) screen.getHeight());
        this.setLocation(0, 0);
        this.setVisible(true);
    }

    public void init() {
        con = this.getContentPane();
        con.setLayout(new BorderLayout());
        con.add("Center", sp);
        tree_jsp.setPreferredSize(new Dimension(200, (int) screen.getHeight()));
        sp.setLeftComponent(tree_jsp);
        JPanel jp = new JPanel(new BorderLayout());
        view_jsp.setPreferredSize(new Dimension((int) screen.getWidth() - 220, 300));
        jp.add("Center", view_jsp);
        JPanel jp1 = new JPanel(new GridLayout(1, 4, 5, 5));
        jp1.add(view_bt);
        jp1.add(edit_bt);
        jp1.add(del_bt);
        jp1.add(end_bt);
        jp.add("South", jp1);
        sp1.setTopComponent(jp);
        sp1.setBottomComponent(data_jsp);
        sp.setRightComponent(sp1);

        File[] file = File.listRoots();
        for (int i = 0; i < file.length; i++) {
            DefaultMutableTreeNode dmt = new DefaultMutableTreeNode(file[i]);
            dmt.add(new DefaultMutableTreeNode("EMPTY"));
            root.add(dmt);
        }

    }

    public void start() {
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        tree_jt.addTreeWillExpandListener(this);
        view_bt.addActionListener(this);
        edit_bt.addActionListener(this);
        del_bt.addActionListener(this);
        end_bt.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == view_bt) {
            TreePath tp = tree_jt.getSelectionPath();
            // System.out.println("tp = " + tp);
            StringTokenizer stk = new StringTokenizer(tp.toString(), "[,]");
            stk.nextToken();
            if (stk.hasMoreTokens()) {
                String filepath = stk.nextToken().trim();
                while (stk.hasMoreTokens()) {
                    filepath += stk.nextToken().trim() + "/";
                }
                String filename = (String) view_li.getSelectedValue();
                filename = filename.substring(0, filename.indexOf("(")).trim();
                File f = new File(filepath, filename);
                try {
                    BufferedReader in = new BufferedReader(new FileReader(f));
                    data_ta.setText("");
                    while (true) {
                        String str = in.readLine();
                        if (str == null)
                            break;
                        data_ta.append(str + "\n");
                    }
                    in.close();
                } catch (IOException ee) {
                }
            }
        } else if (e.getSource() == edit_bt) {
            TreePath tp = tree_jt.getSelectionPath();
            // System.out.println("tp = " + tp);
            StringTokenizer stk = new StringTokenizer(tp.toString(), "[,]");
            stk.nextToken();
            if (stk.hasMoreTokens()) {
                String filepath = stk.nextToken().trim();
                while (stk.hasMoreTokens()) {
                    filepath += stk.nextToken().trim() + "/";
                }
                String filename = (String) view_li.getSelectedValue();
                filename = filename.substring(0, filename.indexOf("(")).trim();
                File f = new File(filepath, filename);
                int xx = JOptionPane.showConfirmDialog(this, "정말 수정하시겠습니까?", "수정", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
                if (xx == 0) {
                    try {
                        DataOutputStream dos = new DataOutputStream(
                            new BufferedOutputStream(
                                new FileOutputStream(f)));
                        byte[] data = data_ta.getText().trim().getBytes();
                        dos.write(data);
                        dos.close();
                    } catch (IOException ee) {
                    }
                }
            }
        } else if (e.getSource() == del_bt) {
            TreePath tp = tree_jt.getSelectionPath();
            // System.out.println("tp = " + tp);
            StringTokenizer stk = new StringTokenizer(tp.toString(), "[,]");
            stk.nextToken();
            if (stk.hasMoreTokens()) {
                String filepath = stk.nextToken().trim();
                while (stk.hasMoreTokens()) {
                    filepath += stk.nextToken().trim() + "/";
                }
                String filename = (String) view_li.getSelectedValue();
                filename = filename.substring(0, filename.indexOf("(")).trim();
                File f = new File(filepath, filename);
                int xx = JOptionPane.showConfirmDialog(this, "정말 삭제하시겠습니까?",
                    "삭제", JOptionPane.YES_NO_OPTION,
                    JOptionPane.QUESTION_MESSAGE);
                if (xx == 0) {
                    f.delete();
                    view_vc.clear();
                    view_li.setListData(view_vc);
                    data_ta.setText("");
                }
            }
        } else if (e.getSource() == end_bt) {
            System.exit(0);
        }
    }

    public void treeWillExpand(TreeExpansionEvent e) {
        if (e.getSource() == tree_jt) {
            tree_jt.setSelectionPath(e.getPath());
            TreePath tp = tree_jt.getSelectionPath();
            // System.out.println("tp = " + tp);
            StringTokenizer stk = new StringTokenizer(tp.toString(), "[,]");
            System.out.println(stk);
            stk.nextToken();
            if (stk.hasMoreTokens()) {
                String filepath = stk.nextToken().trim();
                while (stk.hasMoreTokens()) {
                    filepath += stk.nextToken().trim() + "/";
                }
                // System.out.println("file = " + filepath);
                File dir = new File(filepath);
                File[] data = dir.listFiles();
                if (data == null) {
                    return;
                }
                DefaultMutableTreeNode imsi = (DefaultMutableTreeNode) e.getPath().getLastPathComponent();
                imsi.removeAllChildren();
                view_vc.clear();
                if (data.length == 0) {
                    imsi.add(new DefaultMutableTreeNode("EMPTY"));
                } else {
                    int count = -1;
                    for (int i = 0; i < data.length; i++) {
                        if (data[i].isDirectory()) {
                            DefaultMutableTreeNode dtm = new DefaultMutableTreeNode(data[i].getName());
                            dtm.add(new DefaultMutableTreeNode("EMPTY"));
                            imsi.add(dtm);
                            count++;
                        } else {
                            view_vc.add(data[i].getName() + " (" + data[i].length() + "byte, " + new Date(data[i].lastModified()) + ")");
                        }
                    }
                    if (count == -1) {
                        imsi.add(new DefaultMutableTreeNode("EMPTY"));
                    }
                }
                view_li.setListData(view_vc);
            }
        }
    }

    public void treeWillCollapse(TreeExpansionEvent e) {}
}

public class SaerchFileUpdate {
    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception ee) {
        }
        Search ws = new Search();
    }
}

'etc' 카테고리의 다른 글

2014 코스닥 상장기업 취업박람회 포스터  (5) 2014.10.21
svn connector  (1) 2014.09.23
RESTful 웹 서비스에 대해 알아보자  (0) 2013.09.09
[번역] 와이프에게 REST 설명하기  (0) 2013.09.09
Posted by 꼬렙
:

프로젝트 자체를 압축해서 1번 PC 에서 2번 PC로 복사해서 이클립스로 임포트를 할때

개발 환경이 맞지 않아서 오류가 나는 경우가 많습니다



1. 자바 버전이 맞지 않는 경우 (하위 버전 사용)

2. 톰캣 버전이 맞지 않는 경우 (하위 버전 사용)

3. 프로젝트의 Runtimes 가 제대로 지정되지 않은 경우


대충 3가지 정도로 볼수 있습니다


버전과 런타임만 제대로 지정해주면 바로 해결이 되는데 

문제는 이클립스의 Properties 에서만 바꿔줘서는 해결이 되질 않습니다


이클립스의 버그인지.. 어떠한 문제가 생길 소지가 있기 때문에 지원해주질 않는 것인지는 잘 모르겠구요


어쨌든 해결하는 방법을 보도록 하겠습니다


[이클립스의 오류 메세지]


원래 프로젝트를 개발하던 PC는 톰캣7을 사용하고 소스를 옮긴 PC는 톰캣6을 사용하고 있습니다


프로젝트 - Properties - Project Facets

중앙의 프로젝트 정보를 보시면 Dynamic Web Module 이 3.0 이라고 되어 있습니다

[Runtimes] 탭에는 Apache Tomcat v7.0 이라고 되어 있구요


이것을 Dynamic Web Module 2.5, Apache Tomcat v6.0 으로 바꿔줘야 됩니다

이렇게 바꿨는데 아래쪽 설명창에 "Cannot change version of project facet Dynamic Web Module to 2.5" 라고 

에러 메세지가 떠있습니다

여기 설정만으로는 제대로 바뀌질 않는다는 것이죠


그래서 어쩔수 없이 조금 귀찮은 작업을 해줘야 합니다


윈도우 탐색기 등을 이용해서 

이클립스의 workspace 가 있는 곳을 찾아갑니다

제 경우는 D:\Dev\workspace_test 입니다


여기서 변경하려고 하는 프로젝트의 .settins 라는 폴더로 가서


org.eclipse.jdt.core.prefs

org.eclipse.wst.common.project.facet.core.xml

위의 두개 파일을 에디터로 열어줍니다


프로젝트가 개발될때는 자바 1.7과 톰캣 7.0 을 사용했고

현재는 자바 1.7과 톰캣 6.0 입니다


만약 현재 자바 1.7 하위 버전을 사용하고 있다면 두개 파일 내용을 다 수정해야 하고

톰캣만 하위 버전이라면 org.eclipse.wst.common.project.facet.core.xml 파일만 수정하면 됩니다


어차피 열어보면 "아 이 부분을 바꿔줘야 겠구나" 라고 딱 알 수 있을겁니다


[org.eclipse.jdt.core.prefs]


[org.eclipse.wst.common.project.facet.core.xml]


제 경우는 자바 버전은 같고 톰캣 6.0을 사용하고 있으므로


[org.eclipse.wst.common.project.facet.core.xml]의 내용을

<runtime name="Apache Tomcat v6.0">과 <installed facet="jst.web" version="2.5" /> 이렇게 바꿔줍니다


위와 같이 바꾼 다음에 저장을 해주고.. 

이클립스 Project Explorer - 해당 프로젝트 에서 F5(새로고침)를 눌러줍니다

그리고 다시 Properties - Project Facets 로 가보면

Dynamic Web Module 2.5와 Apache Tomcat v6.0 으로 바뀌어 있는 것을 확인할 수 있습니다


그리고 마지막으로 Java Build Path 의 [Libraries] 탭으로 가서 Server Library 를 톰캣 6.0으로 맞춰주면 됩니다





그리고 OK를 눌러보면 프로젝트가 깔끔한 모습으로 되어 있는 것을 확인할 수 있습니다









'Eclipse' 카테고리의 다른 글

jquery.min.js 파일 오류 표시되지 않게 하는 방법  (0) 2014.03.04
이클립스 단축키 정리  (0) 2013.08.16
Posted by 꼬렙
:

웹프로젝트에 jquery.XXX.min.js 를 넣어두면 꼭 에러 표시가 뜹니다


그대로 둔다고 해도 특별히 문제가 생기진 않지만 상당히 눈에 거슬리죠..


빨간 엑스 표시를 없애는 방법입니다


Project Explorer - Properties - JavaScript - Include Path 를 열어줍니다


Source 탭으로 이동한 뒤에 Included 또는 Excluded 를 선택하고 [Edit] 버튼을 눌러줍니다



아래쪽 Exclusion patterns: 영역에서 Add 를 눌러주고

**/jquery** 이라고 입력합니다



그리고 Finish


이렇게 js 파일 옆에 있던 x 표시가 사라집니다




Posted by 꼬렙
: