MISTERY

Install Java 8 in Linux

1. Before installing Java, make sure to first verify the version of installed Java.

# java -version

java version "1.7.0_75"
OpenJDK Runtime Environment (IcedTea 2.5.4) (7u75-2.5.4-2)
OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode)

It’s clear from the output above that the installed version of Java is OpenJDK 1.7.0_75.

2. Make a directory where you want to install Java. For global access (for all users) install it preferably in the directory /opt/java.

# mkdir /opt/java && cd /opt/java

3. Now it’s time to download Java (JDK) 8u45 source tarball files for your system architecture by going to official Java download page.

For reference, we have provided the source tarball file-names, please select and download these below mentioned files only.

jdk-8u45-linux-i586.tar.gz		[For 32-bit Systems]
jdk-8u45-linux-x64.tar.gz		[For 64-bit Systems]

Alternatively, you may use wget command to download files directly into the /opt/java directory as shown below.

--------------- For 32-bit Systems ---------------

# cd /opt/java
# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-i586.tar.gz"
--------------- For 64-bit Systems --------------

# cd /opt/java
# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.tar.gz"

4. Once file has been downloaded, you may extract the tarball using tar command as shown below.

# tar -zxvf jdk-8u45-linux-i586.tar.gz		[For 32-bit Systems]
# tar -zxvf jdk-8u45-linux-x64.tar.gz		[For 64-bit Systems]

Note: I have used 64-bit tarball throughout the tutorial. If you are using 32-bit, you may change it accordingly.

5. Next, move to the extracted directory and use command update-alternatives to tell system where java and its executables are installed.

# cd jdk1.8.0_45/
# update-alternatives --install /usr/bin/java java /opt/java/jdk1.8.0_45/bin/java 100  
# update-alternatives --config java
Update Java Alternatives

Update Java Alternatives

6. Tell system to update javac alternatives as:

# update-alternatives --install /usr/bin/javac javac /opt/java/jdk1.8.0_45/bin/javac 100
# update-alternatives --config javac
Update Javac Alternatives

Update Javac Alternatives

7. Similarly, update jar alternatives as:

# update-alternatives --install /usr/bin/jar jar /opt/java/jdk1.8.0_45/bin/jar 100
# update-alternatives --config jar
Update Jar Alternatives

Update Jar Alternatives

8. Setting up Java Environment Variables.

# export JAVA_HOME=/opt/java/jdk1.8.0_45/	
# export JRE_HOME=/opt/java/jdk1.8.0._45/jre 	
# export PATH=$PATH:/opt/java/jdk1.8.0_45/bin:/opt/java/jdk1.8.0_45/jre/bin
Set Java Environment Variables

Set Java Environment Variables

9. Now You may verify the Java version again, to confirm.

# java -version

java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

Suggested: If you are not using OpenJDK (open source implementation of java), you may remove it as:

# apt-get remove openjdk-*

Enable Java Support in Firefox

10. To enable Java 8 JDK 8u45 Support in Firefox, you need to run following commands to enable Java module for Firefox.

On Debian, Ubuntu and Mint
--------------- For 32-bit Systems ---------------

# update-alternatives --install /usr/lib/mozilla/plugins/libjavaplugin.so libjavaplugin.so /opt/java/jdk1.8.0_45/jre/lib/i386/libnpjp2.so 20000

--------------- For 64-bit Systems ---------------

# update-alternatives --install /usr/lib/mozilla/plugins/libjavaplugin.so libjavaplugin.so /opt/java/jdk1.8.0_45/jre/lib/amd64/libnpjp2.so 20000
On RHEL, CentOS and Fedora
--------------- For 32-bit Systems ---------------

# alternatives --install /usr/lib/mozilla/plugins/libjavaplugin.so libjavaplugin.so /opt/java/jdk1.8.0_45/jre/lib/i386/libnpjp2.so 20000

--------------- For 64-bit Systems ---------------

# alternatives --install /usr/lib/mozilla/plugins/libjavaplugin.so libjavaplugin.so /opt/java/jdk1.8.0_45/jre/lib/amd64/libnpjp2.so 20000

11. Now verify the Java support by restarting Firefox and enter about:plugins on the address bar. You will get similar to below screen.

Java 8 Support in Firefox

Java 8 Support in Firefox

That’s all for now. Hope this post of mine will help you in setting oracle Java, the easiest way. I would like to know your view on this. Keep connected, Stay tuned! Like and share us and help us get spread.








출처 : http://www.tecmint.com/install-java-jdk-jre-in-linux/









신고

Comment +0

변수나 메쏘드를 선언할 때 접근을 제어할 수 있는 modifier를 설정할 수 있다. 이러한 접근 관련 modifier를 통해서 객체지향 언어의 중요 특성 중 하나인 캡슐화(encapsulation)과 정보 숨김(information hiding)을 구현할 수 있다.


* 접근 제어자


 구분

modifier 

설명 

접근 권한 

 public

 모든 클래스에서 접근이 가능함을 의미한다.

protected 

동일 패키지에 속하는 클래스와 하위 클래스 관계의 클래스에 의해 접근이 가능하다. 

private 

클래스 내에서만 접근이 가능하다 


* 접근 권한


 종류

클래스 

하위 클래스 

동일 패키지 

모든 클래스 

private 

(default) 

protected 

public 



- private


접근 관련 modifier 중에서 가장 권한 범위가 좋은 modifier로 자기 자신 클래스 내에서만 이용할 수 있는 멤버를 선언할 때 사용한다.


- (default)


접근 관련 modifier를 지정하지 않은 경우이다. 이는 동일 패키지에 속하는 클래스만 접근할 수 있는 멤버이다.


- protected


동일 패키지와 동일 패키지에 포함되지는 않지만 하위 클래스 관계에 있는 클래스도 접근할 수 있다.


- public


모든 클래스에 의해 접근할 수 있다.  즉, 접근 제약이 없다.



위의 modifier는 변수의 선언, 생성자, 메소드 모두에 공통으로 적용된다.













출처 : http://hyeonstorage.tistory.com/176












신고

Comment +0


 package kr.test.acanet;

 

import java.io.*;

import org.json.simple.*;

 

public class JavaJSON {

       public static void main(String[] args) {

             //Json 객체 생성.

             JSONObject jobj = new JSONObject();

             jobj.put("name""wdkang");

             jobj.put("company""acanet");

             jobj.put("age""26");

            

             //Json Array 생성.

             JSONArray maglist = new JSONArray();

             maglist.add("JSON test");

             maglist.add("hello JSON");

 

             jobj.put("list", maglist);

 

             try {

 

                    FileWriter file = new FileWriter("c:\\myJson.json");

                    file.write(jobj.toJSONString());

                    file.flush();

                    file.close();

             } catch(IOException e) {

                    e.printStackTrace();

             }

             System.out.println("Create JSON Object : "+jobj);

       }

}

 


이렇게해서 생성된 myJson.json 파일은 다음과같은 문자열을 가지게 됩니다. 자바스크립트의 Object객체와 같은 형식입니다. 그렇기에 자바스크립트의 eval()를 이용하여 바로 자바스크립트 객체로 사용할수가 있게됩니다.
 Create JSON Object : {"age":"26","company":"acanet","name":"wdkang","list":["JSON test","hello JSON"]}

그럼 이 생성된 json파일을 웹프로젝트같은 경우면 request에 담아 뿌려주면 되는거고(이때는 파일이 아닌 객체상태로 request에 담아야겠죠?), 지금은 자바프로젝트로 진행했으니 파일을 읽어와 다시 파싱해서 콘솔에 뿌리는걸로 하겠습니다.

 package kr.test.acanet;

 

import java.io.*;

import org.json.simple.*;

import org.json.simple.parser.*;

import java.util.Iterator;

 

public class JavaJSON_parse {

       public static void main(String[] args) {

             JSONParser parser = new JSONParser();

 

             try {

                    // myJson.json파일을 읽어와 Object 파싱

                    Object obj = parser.parse(new FileReader("c:\\myJson.json"));

 

                    JSONObject jsonObject =(JSONObject) obj;

 

                    String name = (String) jsonObject.get("name");

                    String age = (String) jsonObject.get("age");

                    String company = (String) jsonObject.get("company");

                   

                    System.out.println("name:" + name);

                    System.out.println("age:" + age);

                    System.out.println("company:" + company);

 

                    // list가져오기

                    JSONArray msgList =(JSONArray) jsonObject.get("list");

                    Iterator<String>iterator = msgList.iterator();

                    System.out.println("**JsonList**");

                    while(iterator.hasNext()) {

                           System.out.println(iterator.next());

                    }

             } catch (Exceptione) {

                    e.printStackTrace();

 

             }

       }

}

 


실행해보면 정상적으로 파싱되어 다음과 같은 문구가 콘솔에 뿌려집니다.

 name: wdkang

age: 26

company: acanet

**Json List**

JSON test

hello JSON

 


이상! 간단한 JSON 예제입니다.
















출처 : http://cafe.naver.com/jjdev/1464















신고

Comment +0

★ 객체 직렬화

일반적으로 메모리에 생성된 객체의 인스턴스는 "비영속성"을 갖는다.

파일이나 데이터베이스에 저장된 데이터처럼 영속성을 가지기 위해서 자바에서는 '객체 직렬화' 기능을 제공한다. 객체 직렬화를 사용하면 파일이나 네트워크를 통해 영속성을 유지할 수 있다.

 

클래스 3개가 필요하다.

 

1. Person

- 게터와 생성자를 사용해서 이름과 나이를 불러온다.

- Serializable을 implements 해오는 게 특징. 보통 인터페이스의 용도는 강제로 오버라이딩을 하는 것이 목적인 경우가 많지만, 여기서는 Serializable의 기능을 사용할 수 있게 하는 의미로 쓰인다.

 

2. 파일 저장 (FileOutputStream)

- serial.dat이라는 파일 안에 생성자의 내용을 불러들여 저장해 줌.

- 자원의 낭비를 막기 위해 사용 후  close() 메서드를 이용해 닫아주어야 함.

 

3. 파일 출력 (FileInputStream)

- 저장된 serial.dat 파일을 불러와서 출력해줌.

- 게터 앤 세터의 기능을 사용해 이름과 나이를 불러와 출력할 수 있도록 코딩됨.

- catch(){} 문이 3개가 있는데, 이를 한꺼번에 통합해줄 수 있음. Exception 클래스를 사용해 주면 됨!

 

결과

 

 

★ 멀티 쓰레드

☆ 싱글 쓰레드 실습

- run() 메서드는 각 작업을 1씩 증가시켜 목표치까지 수행해준다.

- 싱글 쓰레드는 A작업이 끝난 후 차례로 B,C작업이 수행된다.

 

결과



☆ 멀티 쓰레드 실습(1) - Thread

- 멀티 쓰레드를 하는 방법은 2가지가 있다.

- 그 중 하나인 멀티 쓰레드 기능을 수행하는 "Thread"라는 클래스가 라이브러리에 저장되있다.

- 이를 상속받아주면 되며, 메서드는 run()이 아닌 start()이다.

- 멀티 쓰레드 이기 때문에 작업은 순서대로 이루어지지 않으며, 컴퓨터의 빠른 처리속도 기준으로 작업이 이루어진다.

 

결과

 

☆ 멀티 쓰레드 실습(2) - Runnable

- 이해를 돕기 위해 빈 A 클래스를 생성하였다.

- A 클래스를 상속받는 경우, 다중상속이 불가능하므로 멀티 쓰레드를 상속받을 수 없다. 이런 경우 implements를 사용하여 Runnable 클래스를 사용할 수 있다.

- 메인 메서드에서 사용법은 실습(1)과 조금 다르다. 객체를 생성할 때 "Thread" 클래스를 불러온다. 그리고 그 안에 Runnable 클래스를 상속받은 YourThread의 임시객체를 생성해준다.

 

결과

 

 

 

 

 

 

 

출처 : http://kim22036.tistory.com/302

 

 

 

 

 

신고

Comment +0

먼저 서버를 만들 자바 코드를 알아보고, 뒤에는 안드로이드에서 소켓 통신을 위한 설정과정을 간단한 예제를 통해서 알아보겠습니다.

     

     

     

  STEP 1 Java Source Code 

     

  자바 코드는 두 가지를 다루게 됩니다. 처음은 서버를 돌리는 데 필요한 자버 코드를 알아보고, 두 번째는 안드로이드 클라이언트 코드를 알아보겠습니다.

 

 

  [ 서버 ] TCP Server Java Code 

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
 
public class TCPServer implements Runnable {
 
    public static final int ServerPort = 9999;
    public static final String ServerIP = "xxx.xxx.xxx.xxxx";
 
    @Override
    public void run() {
 
        try {
            System.out.println("S: Connecting...");
            ServerSocket serverSocket = new ServerSocket(ServerPort);
 
            while (true) {
                Socket client = serverSocket.accept();
                System.out.println("S: Receiving...");
                try {
                    BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                    String str = in.readLine();
                    System.out.println("S: Received: '" + str + "'");
                     
                    PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())), true);
                    out.println("Server Received " + str);
                catch (Exception e) {
                    System.out.println("S: Error");
                    e.printStackTrace();
                finally {
                    client.close();
                    System.out.println("S: Done.");
                }
            }
        catch (Exception e) {
            System.out.println("S: Error");
            e.printStackTrace();
        }
    }
 
    public static void main(String[] args) {
 
        Thread desktopServerThread = new Thread(new TCPServer());
        desktopServerThread.start();
 
    }
 
}

 

   서버의 기능은 클라이언트에서 오는 데이터를 받아들이는 게 핵심입니다. 자신의 포트를 세팅하여 소켓을 여는 것부터 시작하여, 클라이언트에서 오는 정보를 받기 위해서 accept() 를 통해서 기다립니다. 그리고 데이터가 왔다는 신호가 오면 리더를 통해서 스트림을 읽어냅니다. 그리고 자신이 받은 스트림 정보를 다시 돌려보내는 역할을 합니다. 현재는 하나의 클라이언트와 컨넥트를 통해 데이터를 주고 받는 형식입니다. 많은 클라이언트와 통신하고 싶으면 클라이언트에 대한 정보를 저장하고, 여러 클라이언트에게 적절하게 보내는 기능을 추가하시면 되겠습니다.

 

 

  [ 클라이언트 ] TCP Client Java Code 

 

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.URL;
import java.net.URLConnection;
import org.apache.http.util.ByteArrayBuffer;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
 
public class NewClient extends Activity {
 
    private String html = "";
    private Handler mHandler;
 
    private Socket socket;
 
    private BufferedReader networkReader;
    private BufferedWriter networkWriter;
 
    private String ip = "xxx.xxx.xxx.xxx"// IP
    private int port = 9999// PORT번호
 
    @Override
    protected void onStop() {
        super.onStop();
        try {
            socket.close();
        catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mHandler = new Handler();
 
        try {
            setSocket(ip, port);
        catch (IOException e1) {
            e1.printStackTrace();
        }
 
        checkUpdate.start();
 
        final EditText et = (EditText) findViewById(R.id.EditText01);
        Button btn = (Button) findViewById(R.id.Button01);
        final TextView tv = (TextView) findViewById(R.id.TextView01);
 
        btn.setOnClickListener(new OnClickListener() {
 
            public void onClick(View v) {
                if (et.getText().toString() != null || !et.getText().toString().equals("")) {
                    PrintWriter out = new PrintWriter(networkWriter, true);
                    String return_msg = et.getText().toString();
                    out.println(return_msg);
                }
            }
        });
    }
 
    private Thread checkUpdate = new Thread() {
 
        public void run() {
            try {
                String line;
                Log.w("ChattingStart""Start Thread");
                while (true) {
                    Log.w("Chatting is running""chatting is running");
                    line = networkReader.readLine();
                    html = line;
                    mHandler.post(showUpdate);
                }
            catch (Exception e) {
 
            }
        }
    };
 
    private Runnable showUpdate = new Runnable() {
 
        public void run() {
            Toast.makeText(NewClient.this"Coming word: " + html, Toast.LENGTH_SHORT).show();
        }
 
    };
 
    public void setSocket(String ip, int port) throws IOException {
 
        try {
            socket = new Socket(ip, port);
            networkWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            networkReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        catch (IOException e) {
            System.out.println(e);
            e.printStackTrace();
        }
 
    }
 
}

 

 

  이 번에 살펴볼 코드는 안드로이드 클라이언트 프로그램입니다. 안드로이드 클라이언트 코드에서는 서버에 소켓을 연결하고 받은 정보를 이용하여 프로그램을 수행시키는 것을 다룹니다. 먼저 onCreate()가 되면 서버에 연결하도록 설계되어 있습니다. IP 주소와 포트 번호를 알맞게 설정해주시고, 소켓을 연결합니다. 그리고 데이터를 주고 받기 위해서 리드, 라이터를 설정하여 둡니다. 예제에서는 간단히 텍스트 박스에 문자를 적고 버튼을 누르면, 서버로 데이터를 보냅니다. 그리고 서버에서 오는 데이터를 계속 받기 위해서 while을 쓰레드를 통해서 실행합니다. 여기서 받은 데이터 정보를 토스트 기능을 통해 출력합니다. 여기서 UI에 대한 접근을 핸들러를 통해서 하고 있는 것을 확인할 수 있습니다. 이렇게 하는 이유는 다른 포스트에 올리겠습니다. 일단 UI에 대한 접근은 핸들러를 통해서 수행한다고 생각하시고 프로그램을 수행해야한다는 것만 기억하시고 계시면 될 것 같습니다.

       

 

  STEP 2 Xml Code 

       

   Xml 코드에는 간단히 EditText에서 넣은 문자열을 버튼을 통해 서버로 데이터를 보내는 기본적인 기능만 추가하시면 됩니다.

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <TextView
        android:id="@+id/TextView01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
 
    <EditText
        android:id="@+id/EditText01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
 
    <Button
        android:id="@+id/Button01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Send" />
 
    <TextView
        android:id="@+id/chatting"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
 
</LinearLayout>

 

 

  STEP 3 AndroidManifest.xml Code 

  

  메니페스트에는 소켓을 이용하기위해 인터넷을 사용해야 하므로, 인터넷을 사용하겠다는 퍼미션만 추가해주시면 됩니다.

   

/* AndroidManifest.xml 에 추가해야할 인터넷 사용 허가권 */
<uses-permission android:name="android.permission.INTERNET" />

 

<?xml version="1.0" encoding="utf-8"?>
    package="socket.client"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name" >
 
        <activity
            android:name=".NewClient"
            android:label="@string/app_name" >
 
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
    <uses-permission android:name="android.permission.INTERNET" />
</manifest>

 

     

     

<마무리> 서버/클라이언트 소켓(Socket) 통신하기

 

 

  서버와 클라이언트의 소켓 통신에 대해서 알아보았습니다. 핸드폰 내에서의 기능과 정보만으로는 어플리케이션이 한정적일 수 밖에 없습니다. 그렇기 때문에 통신을 통해서 좀 더 폭넓은 서비스를 제공하기 위해서 서버와 클라이언트가 서로 통신할 수 있도록 소켓에 대해서 알아볼 필요가 있었습니다. 하나의 서버가 여러 곳의 클라이언트들에 대해서 서비스를 해줘야 할 때는 클라이언트에 대한 정보를 가지고 있으면서 소켓을 각각 연결시켜주어야 합니다. 안드로이드 클라이언트 부분에서도 현재 수행되고 있는 동작에 영향을 받지 않으면서 백그라운드에서 쓰레드가 돌면서 서버에서 오는 정보를 수시로 받을 수 있도록 해야합니다. 소켓 통신에 대한 기존 개념을 알고 계신 분들이라면 크게 어렵지 않게 이해하실 수 있으셨으리라 봅니다. 처음 접하시는 분들은 데이터를 주고 받는 부분에서 자신이 수행하고 싶은 기능만 추가해주시면 간단히 소켓 통신을 하실 수 있으리라 생각합니다.

   

   

   

[ 참고자료 ]

     












출처 : http://pulsebeat.tistory.com/24

대부분 위 링크의 사람과 같이 구성되어 있다













신고

Comment +0

티스토리 툴바