package thread;

public class Test extends Thread {
 public void run()
 {
  System.out.println("thread run!!");
 }

 public static void main(String[] args){
  
  Test test = new test();
  test.start();
 }
}

 

실행결과

 

thread run!!

 

 

쓰레드클래스를 extends해줘서 test객체에 start()메소드로 인해 run메소드가 실행 된다.

'JAVA > 자바' 카테고리의 다른 글

자바 쓰레드 Runnable  (0) 2015.03.19
자바 쓰레드 Thread  (0) 2015.03.19
자바 클라이언트 기초소스  (0) 2015.03.19
자바 서버 기초소스  (0) 2015.03.19
자바 파일 입출력  (0) 2014.09.24
블로그 이미지

왕왕왕왕

,

import java.io.InputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.OutputStream;

import java.net.Socket;

import java.util.Scanner;


public class Client {


private InputStream is;

private OutputStream os;

private Socket socket;

private ObjectInputStream ois;

private ObjectOutputStream oos;

private String rmsg;


/**

* @param args

*/


public static void main(String[] args) {

// TODO Auto-generated method stub

}


// 폼에서 객체생성 후 사용될 메소드

public String start(String msg) {

String re = null;


try {


// 접속할 아이피와 포트를 가진 클라이언트 소켓생성

socket = new Socket("localhost", 5555);

sendMessage(msg);

re = receiveMessage(socket);


} catch (Exception e) {

e.printStackTrace();

} finally {

try {

socket.close();


} catch (Exception e1) {

e1.printStackTrace();


}

}

return re;


}


// 서버에서 전송된 메시지를 받아서 클라이언트를 사용한 폼에서 받을 값을 리턴함

private String receiveMessage(Socket socket) {

System.out.println("[ReceiveMessage] " + rmsg);

try {

is = socket.getInputStream();

ois = new ObjectInputStream(is);

rmsg = (String) ois.readObject();


} catch (Exception e) {

e.printStackTrace();

}

return rmsg;

}


//폼에서 인자로 입력된 값을 서버로 전송

public void sendMessage(String msg) {


System.out.println("[SendMessage] " + msg);

try {

os = socket.getOutputStream();

oos = new ObjectOutputStream(os);

oos.writeObject(msg);


} catch (Exception e) {

e.printStackTrace();

}


}




}



'JAVA > 자바' 카테고리의 다른 글

자바 쓰레드 Thread  (0) 2015.03.19
자바 쓰레드 기초  (0) 2015.03.19
자바 서버 기초소스  (0) 2015.03.19
자바 파일 입출력  (0) 2014.09.24
콤보박스 항목리스트관련!!  (0) 2014.05.29
블로그 이미지

왕왕왕왕

,

import java.io.InputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.net.ServerSocket;

import java.net.Socket;


public class Server extends Thread {

private InputStream is;

private OutputStream os;

private ServerSocket serversocket;

private ObjectInputStream ois;

private ObjectOutputStream oos;

private Socket socket;

DB db;


/**

* @param args

*/

public void run() {

db = new DB();

try {

// 5000번 서버소켓 생성

serversocket = new ServerSocket(5555);

while (true) {

System.out.println("[Server Open]");

socket = serversocket.accept();


// 접속된 클라이언트 ip정보출력

System.out.println("[Connect client]: "

+ socket.getInetAddress());


is = socket.getInputStream();

os = socket.getOutputStream();

ois = new ObjectInputStream(is);

oos = new ObjectOutputStream(os);


// 클라이언트에서 스트림을 READ

String msg = (String) ois.readObject();

System.out.println("Server[Read] : " + msg);


// 클라이언트로 DB에서 리턴값 메시지전송

oos.writeObject(db.test(msg)); //이부분에서 전송

System.out.println("Server[Send] : " + db.test(msg));

// 한번입출력하고 소켓을 닫아주는 부분

socket.close();


}

} catch (Exception e) {

System.out.println("server " + e.toString());

}

}


public static void main(String[] args) {

// TODO Auto-generated method stub

Server server_start = new Server();

server_start.start();


}


}



'JAVA > 자바' 카테고리의 다른 글

자바 쓰레드 기초  (0) 2015.03.19
자바 클라이언트 기초소스  (0) 2015.03.19
자바 파일 입출력  (0) 2014.09.24
콤보박스 항목리스트관련!!  (0) 2014.05.29
DefaultClose() 옵션  (0) 2014.05.26
블로그 이미지

왕왕왕왕

,

리스너 안에는 오직 하나의 메소드만이 정의되어 있다. 다음 리스너들이 View클래스 안에 정의되어있다.

 

 리스너

콜백 메소드 

설명 

View.OnClickListener 

onClick() 

사용자가 어떤 항목을 터치하거나 내비게이션 키나 트래볼로 항목으로 이동한 후에 엔터키를 눌러서 선택하면 호출된다 

View.OnLongClickListener

onLongClick()

사용자가 항목을 터치하여서 일정 시간 동안 그대로 누르고 있었으면 발생한다. 

View.OnFocusChargeListener

onFocusChange() 

 사용자가 하나의 항목에서 다른 항목으로 포커스를 이동할 때 호출된다.

View.OnKeyListener

onKey()

포커스를 가지고 있는 항목 위에서 키를 눌렀다가 놓았을대 호출된다. 

View.OnTouchListener

onTouch() 

사용자가 터치 이벤트로 간주되는 동작을 할 경우에 호출된다. 

View.OnCreateContextMenuListener 

onCreateContextMenu() 

 컨텍스트 메뉴가 구축되어 있는 경우에 호출된다.

 

 

블로그 이미지

왕왕왕왕

,

안드로이드 Event 처리
- 안드로이드에서는 이벤트를 처리하는 다양한 방법이 존재한다.
- 안드로이드에서 다양한 이벤트 처리 방법


1) 콜백 메서드 재정의
2) 리스너 인터페이스 구현
3) 액티비티 리스너 구현
4) 뷰 리스너 구현
5) 무명 클래스 사용


▶ 이벤트리스너란
- 한 개의 콜백 메서드를 가지고 있는 View 클래스 안에 선언된 인터페이스
- 이벤트가 발생될 때 안드로이드 프레임웍에 의해 호출된다.


▶ 콜백(callback) 메서드란
일반적인 경우 사용자가 호출함으로써 시스템에 전달되어 호출된 메서드를 실행한다. 그러나 콜백메서드는 일반메서드와 달리 반대로 시스템이 해당 메서드를 호출한다. 콜백메서드는 이벤트 처리와 같은 경우에만 사용된다.


▶ findViewById(int id)
뷰는 자신을 식별하기 위해 ID 를 정의한다. 뷰를 생성하고 애플리케이션에서 뷰를 참조하려면 뷰를 위한 고유 ID 가 필요하다. ID 는 일반적으로 XML 파일에 속성으로 정의한다. XML 에서 뷰에 ID 를 지정한다면 findViewById 메서드를 이용하여 애플리케이션에서 참조할 수 있다.
형식: View findViewById(int id)
설명: Finds a view that was identified by the id attribute from the XML that was processed in onCreate(Bundle).

예: Button b1=(Button)findViewById(R.id.button1);


▶ 이벤트 처리
뷰는 사용자의 동작, 즉 이벤트에 의하여 상호작용이 발생하는 영역이다. 뷰에서 발생하는 이벤트를 처리하려면 이벤트를 처리하는 코드를 작성하고, 이를 뷰와 연결해야 한다.
View 클래스는 이벤트를 처리하는 인터페이스인 다음과 같은 리스너를 제공한다.
OnClickListener: void onClick(View v)
==> 그 외의 리스너는 홈페이지에서 찾아보자.
http://developer.android.com/reference/android/view/View.html


[실습 1] 버튼을 클릭하면 텍스트뷰의 텍스트 내용을 변경한다.
- 텍스트뷰와 버튼이 있는 화면을 만든다. 이 때 텍스트뷰와 버튼 모두 ID 가 정의되어 있도록 한다.
- src 폴더의 java 파일에 다음과 같이 코드를 추가한다.


1) 클래스에 View.OnClickListener 를 구현한다.
implements View.OnClickListener


2) 클래스 내에 오른쪽 버튼을 클릭하여 나타난 바로가기 메뉴에서 [Source]- [Override] 메뉴를 클릭한다.

 

 



3) 나타난 대화상자에서 “onClick" 메서드를 선택한 후 [OK] 버튼을 클릭한다. 그러면 클래스에 onClick 메서드가 삽입된다.

 

 

 


4) onCreate 메서드에 다음과 같이 코드를 작성한다. 즉 버튼을 리스너에 등록한다.
Button b1=(Button)findViewById(R.id.버튼의 ID);
b1.setOnClickListener(this);

5) onClick 메서드에는 다음과 같은 코드를 작성한다. 즉 버튼을 클릭하면 텍스트뷰의 텍스트가 변경되도록 한다.
TextView t1=(TextView)findViewById(R.id.텍스트뷰의 ID);
t1.setText("시작입니다");
※ 코드에서 리소스를 참조하려면 다음과 같이 R.java 파일에 정의된 R 클래스와 하위 클래스의 멤버변수를 통하여 접근한다.
R.리소스_형식.리소스_이름


[실습 2] 2 개의 버튼과 한 개의 텍스트뷰 추가. 각각의 버튼을 클릭하면 해당 텍스트 내용이 텍스트뷰에 나타나도록 한다.


- 이벤트 발생시키는 뷰의 id 를 파악하여 id 에 따라 텍스트 값 출력
- OnClickListener 의 onClick 메서드는 누구를 클릭했는지 View 타입의 인수 v 를 전달받는다. v 의 getId 메서드를 이용하여 클릭된 버튼을 알아내고 각 버튼별로 일을 처리하도록 한다.


[실습 3] 화면에 마우스를 클릭하거나, 움직임에 대한 텍스트 내용이 텍스트뷰에 표시되도록 한다.


- 모바일 환경에서 가장 흔하게 발생하는 이벤트는 손가락이나 스타일러스로 화면을 누르는 터치동작이다. 이 이벤트는 콜백 메서드나 리스너의 핸들러로 받는다


boolean onTouchEvent(MotionEvent event)
boolean onTouch(View v, MotionEvent event)


- MotionEvent.getAction 메서드는 사용자가 화면에 어떤 일을 했는지 정보를 전달한다.

ACTION_DOWN
화면을 눌렀다
ACTION_MOVE
누른 채로 움직였다
ACTION_UP
화면에서 손가락을 뗐다.

- 해결 방안
1) View.OnTouchListener 이용
2) 레이아웃의 id를 파악하여 레이아웃에 이벤트 리스너 등록
3) 동작에 따라 텍스트뷰에 상태 알림 텍스트 표시


[실습 4] 체크 버튼 추가. 체크 버튼 클릭에 따라 선택 여부의 텍스트 내용이 체크 박스 텍스트에 표시되도록 한다.

 

 


- OnCheckedChangeListener 이용
- 체크 버튼의 isChecked() 메서드 이용하여 체크 상태를 파악

 

'안드로이드' 카테고리의 다른 글

탭호스트 사용법  (0) 2015.05.15
이벤트처리:어떤 리스너들이 있는가?  (0) 2015.03.13
이벤트처리  (0) 2015.03.12
레이아웃:코드로 레이아웃 생성  (0) 2015.03.12
안드로이드 API 주소  (0) 2015.03.12
블로그 이미지

왕왕왕왕

,

이벤트처리

안드로이드 2015. 3. 12. 20:30

무한루프 돌면서 입력을 기다리는 폴링방식을 자원낭비가 심하다.

 

이벤트 구동 방식은 다른작업을하다가 입력이 발생하면 이벤트가 발생되고 애플리케이션이 이벤트를 처리한다.

 

 

이벤트처리하는 방법은 여러가지가 있다. 많이 사용되는 두가지방법을 살펴본다.

 

뷰클래스의 이벤트 처리 메소드를 재정의하는방법

뷰클래스의 이벤트 처리 메소드를 재정의한다. 특수한 경우에만 사용

 

이벤트를 처리하는 객체를 생성하여 이벤트를 처리하는 방법

이벤트를 처리하는 객체를 별도로 생성하여 위젯에 등록한다. 이벤트를 처리하는 가장 일반적인 방법

 

 

1. 이벤트 처리 메소드 재정의

 

사용자와 상호작용하는 객체는 View클래스이다 이벤트 발생했을 경우 호출되는 몇개의 콜백메소드를 가지고 있다.

 

View 객체에 액션이 발생하면 프레임워크에서 콜백 메소드를 호출한다.

 

예를 들어 키패드를 누르면 View클래스의 onKeyDown()메소드가 호출

키 이벤트를 처리하는 방법은 onKeyDown()메소드를 재정의하는것이다.

 

이방법을 사용하려면 View클래스를 상속받아서 자신의 뷰를 정의하여야한다. 이벤트처리하기위해서 상속받는 것은 실용적이지 않다. 그래서 많이 사용되지않는다.

 

반드시 이 방법이 필요한 경우는 사용자가 커스텀 컴포넌트를 만들고 싶은 경우이다.

 

우리가 재정의 할 수 있는 View클래스의 이벤트 처리 메소드는 다음과 같다.

 

onKeydown(int,KeyEvent) - 사용자가 키보드를 눌렀을 때 호출

onKeyUp(int,KeyEvent) - 사용자가 키보드에서 손을 뗐을대 호출

 

onTrackballEvent(MotionEvent) - 사용자가 트랙볼을 움직였을 때 호출

ontouchEvent(MotionEvent) - 사용자가 화면을 터치했을 때 호출

onFocusChanged(boolean, int, Rect) - 뷰가 포커스를 얻거나 잃었을 때 호출

 

 

 

블로그 이미지

왕왕왕왕

,

선형 레이아웃은 자식뷰안에 LinearLayout.LayoutParams 객체를 가지고있고 배치관련 정보들을 저장한다.

 

상대적레이아웃객체는 자식뷰들 안에 RelativeLayout.LayoutParams 객체안에 배치관련 정보들을 저장한다.

 

 

예를들면 ViewGroup.LayoutParams는 필드로 layout_width, layout_height를 가지고, ViewGroup.LayoutParams에서 파생된 LinearLayout.LayoutParams는 추가로 layout_gravity, layout_weight를 가진다.

RelativeLayout.LayoutParams는 추가로 layout_above,layout_alignBaseline...등 많은 속성을 가진다.

 

코드만으로 인터페이스를 작성할 경우 각각의 뷰를 뷰그룹에 추가할때마다 적절한 LayoutParams 객체를 생성하여 인수로 전달한다.

 

 

LinearLayout manager = new LinearLayout(this);

manager.setOrientation(LinearLayout.VERTICAL);

 

Button btn1 = new Button(this);

btn1.setText("테스트버튼1");

Button btn2 = new Button(this);

btn2.setText("테스트버튼2");

 

LinearLayout.Params param = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,

LinearLayout.LayoutParams.WRAP_CONTENT);

 

manager.addView = (btn1,param);

manager.addView = (btn2,param);

 

setContentView(manager);

 

 

블로그 이미지

왕왕왕왕

,

http://developer.android.com/reference/packages.html

 

영어다. 개발하려면 영어라도 해석하면서 봐야 할 것 이다.

'안드로이드' 카테고리의 다른 글

이벤트처리  (0) 2015.03.12
레이아웃:코드로 레이아웃 생성  (0) 2015.03.12
레이아웃:AbsoluteLayout  (0) 2015.03.12
레이아웃:RelativeLayout  (0) 2015.03.12
레이아웃:FrameLayout,TableLayout  (0) 2015.03.12
블로그 이미지

왕왕왕왕

,