給你一個經(jīng)典的例子。run里面放空循環(huán)來觀察多線程是不合理的,空循環(huán)消耗時序極小,用sleep來間隔時間才是合理的。
創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司,專注成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)站營銷推廣,申請域名,網(wǎng)站空間,網(wǎng)站托管運營有關(guān)企業(yè)網(wǎng)站制作方案、改版、費用等問題,請聯(lián)系創(chuàng)新互聯(lián)。
class?RunnableDemo?implements?Runnable?{
private?Thread?t;
private?String?threadName;
RunnableDemo(?String?name)?{
threadName?=?name;
System.out.println("Creating?"?+??threadName?);
}
public?void?run()?{
System.out.println("Running?"?+??threadName?);
try?{
for(int?i?=?4;?i??0;?i--)?{
System.out.println("Thread:?"?+?threadName?+?",?"?+?i);
//?Let?the?thread?sleep?for?a?while.
Thread.sleep(50);
}
}catch?(InterruptedException?e)?{
System.out.println("Thread?"?+??threadName?+?"?interrupted.");
}
System.out.println("Thread?"?+??threadName?+?"?exiting.");
}
public?void?start?()?{
System.out.println("Starting?"?+??threadName?);
if?(t?==?null)?{
t?=?new?Thread?(this,?threadName);
t.start?();
}
}
}
public?class?TestThread?{
public?static?void?main(String?args[])?{
RunnableDemo?R1?=?new?RunnableDemo(?"Thread-1");
R1.start();
RunnableDemo?R2?=?new?RunnableDemo(?"Thread-2");
R2.start();
}???
}
具體如下:
連連看的小源碼
package Lianliankan;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class lianliankan implements ActionListener
{
JFrame mainFrame; //主面板
Container thisContainer;
JPanel centerPanel,southPanel,northPanel; //子面板
JButton diamondsButton[][] = new JButton[6][5];//游戲按鈕數(shù)組
JButton exitButton,resetButton,newlyButton; //退出,重列,重新開始按鈕
JLabel fractionLable=new JLabel("0"); //分數(shù)標簽
JButton firstButton,secondButton; //
分別記錄兩次62616964757a686964616fe59b9ee7ad9431333335326239被選中的按鈕
int grid[][] = new int[8][7];//儲存游戲按鈕位置
static boolean pressInformation=false; //判斷是否有按鈕被選中
int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戲按鈕的位置坐標
int i,j,k,n;//消除方法控制
代碼(code)是程序員用開發(fā)工具所支持的語言寫出來的源文件,是一組由字符、符號或信號碼元以離散形式表示信息的明確的規(guī)則體系。
對于字符和Unicode數(shù)據(jù)的位模式的定義,此模式代表特定字母、數(shù)字或符號(例如 0x20 代表一個空格,而 0x74 代表字符“t”)。一些數(shù)據(jù)類型每個字符使用一個字節(jié);每個字節(jié)可以具有 256 個不同的位模式中的一個模式。
在計算機中,字符由不同的位模式(ON 或 OFF)表示。每個字節(jié)有 8 位,這 8 位可以有 256 種不同的 ON 和 OFF 組合模式。對于使用 1 個字節(jié)存儲每個字符的程序,通過給每個位模式指派字符可表示最多 256 個不同的字符。2 個字節(jié)有 16 位,這 16 位可以有 65,536 種唯一的 ON 和 OFF 組合模式。使用 2 個字節(jié)表示每個字符的程序可表示最多 65,536 個字符。
單字節(jié)代碼頁是字符定義,這些字符映射到每個字節(jié)可能有的 256 種位模式中的每一種。代碼頁定義大小寫字符、數(shù)字、符號以及 !、@、#、% 等特殊字符的位模式。每種歐洲語言(如德語和西班牙語)都有各自的單字節(jié)代碼頁。
雖然用于表示 A 到 Z 拉丁字母表字符的位模式在所有的代碼頁中都相同,但用于表示重音字符(如"é"和"á")的位模式在不同的代碼頁中卻不同。如果在運行不同代碼頁的計算機間交換數(shù)據(jù),必須將所有字符數(shù)據(jù)由發(fā)送計算機的代碼頁轉(zhuǎn)換為接收計算機的代碼頁。如果源數(shù)據(jù)中的擴展字符在接收計算機的代碼頁中未定義,那么數(shù)據(jù)將丟失。
如果某個數(shù)據(jù)庫為來自許多不同國家的客戶端提供服務(wù),則很難為該數(shù)據(jù)庫選擇這樣一種代碼頁,使其包括所有客戶端計算機所需的全部擴展字符。而且,在代碼頁間不停地轉(zhuǎn)換需要花費大量的處理時間。
俄羅斯方塊——java源代碼提供importjava.awt.*;importjava.awt.event.*;//俄羅斯方塊類publicclassERS_BlockextendsFrame{publicstaticbooleanisPlay=false;publicstaticintlevel=1,score=0;publicstaticTextFieldscoreField,levelField;publicstaticMyTimertimer;GameCanvasgameScr;publicstaticvoidmain(String[]argus){ERS_Blockers=newERS_Block("俄羅斯方塊游戲V1.0Author:Vincent");WindowListenerwin_listener=newWinListener();ers.addWindowListener(win_listener);}//俄羅斯方塊類的構(gòu)造方法ERS_Block(Stringtitle){super(title);setSize(600,480);setLayout(newGridLayout(1,2));gameScr=newGameCanvas();gameScr.addKeyListener(gameScr);timer=newMyTimer(gameScr);timer.setDaemon(true);timer.start();timer.suspend();add(gameScr);PanelrightScr=newPanel();rightScr.setLayout(newGridLayout(2,1,0,30));rightScr.setSize(120,500);add(rightScr);//右邊信息窗體的布局MyPanelinfoScr=newMyPanel();infoScr.setLayout(newGridLayout(4,1,0,5));infoScr.setSize(120,300);rightScr.add(infoScr);//定義標簽和初始值Labelscorep=newLabel("分數(shù):",Label.LEFT);Labellevelp=newLabel("級數(shù):",Label.LEFT);scoreField=newTextField(8);levelField=newTextField(8);scoreField.setEditable(false);levelField.setEditable(false);infoScr.add(scorep);infoScr.add(scoreField);infoScr.add(levelp);infoScr.add(levelField);scorep.setSize(newDimension(20,60));scoreField.setSize(newDimension(20,60));levelp.setSize(newDimension(20,60));levelField.setSize(newDimension(20,60));scoreField.setText("0");levelField.setText("1");//右邊控制按鈕窗體的布局MyPanelcontrolScr=newMyPanel();controlScr.setLayout(newGridLayout(5,1,0,5));rightScr.add(controlScr);//定義按鈕playButtonplay_b=newButton("開始游戲");play_b.setSize(newDimension(50,200));play_b.addActionListener(newCommand(Command.button_play,gameScr));//定義按鈕LevelUPButtonlevel_up_b=newButton("提高級數(shù)");level_up_b.setSize(newDimension(50,200));level_up_b.addActionListener(newCommand(Command.button_levelup,gameScr));//定義按鈕LevelDownButtonlevel_down_b=newButton("降低級數(shù)");level_down_b.setSize(newDimension(50,200));level_down_b.addActionListener(newCommand(Command.button_leveldown,gameScr));//定義按鈕LevelPauseButtonpause_b=newButton("游戲暫停");pause_b.setSize(newDimension(50,200));pause_b.addActionListener(newCommand(Command.button_pause,gameScr));//定義按鈕QuitButtonquit_b=newButton("退出游戲");quit_b.setSize(newDimension(50,200));quit_b.addActionListener(newCommand(Command.button_quit,gameScr));controlScr.add(play_b);controlScr.add(level_up_b);controlScr.add(level_down_b);controlScr.add(pause_b);controlScr.add(quit_b);setVisible(true);gameScr.requestFocus();}}//重寫MyPanel類,使Panel的四周留空間classMyPanelextendsPanel{publicInsetsgetInsets(){returnnewInsets(30,50,30,50);}}//游戲畫布類classGameCanvasextendsCanvasimplementsKeyListener{finalintunitSize=30;//小方塊邊長introwNum;//正方格的行數(shù)intcolumnNum;//正方格的列數(shù)intmaxAllowRowNum;//允許有多少行未削intblockInitRow;//新出現(xiàn)塊的起始行坐標intblockInitCol;//新出現(xiàn)塊的起始列坐標int[][]scrArr;//屏幕數(shù)組Blockb;//對方快的引用//畫布類的構(gòu)造方法GameCanvas(){rowNum=15;columnNum=10;maxAllowRowNum=rowNum-2;b=newBlock(this);blockInitRow=rowNum-1;blockInitCol=columnNum/2-2;scrArr=newint[32][32];}//初始化屏幕,并將屏幕數(shù)組清零的方法voidinitScr(){for(inti=0;i=rowNum||col=columnNum)return(-1);elsereturn(scrArr[row][col]);}//返回新塊的初始行坐標方法publicintgetInitRow(){return(blockInitRow);//返回新塊的初始行坐標}//返回新塊的初始列坐標方法publicintgetInitCol(){return(blockInitCol);//返回新塊的初始列坐標}//滿行刪除方法voiddeleteFullLine(){intfull_line_num=0;intk=0;for(inti=0;i1){ERS_Block.level--;ERS_Block.levelField.setText(""+ERS_Block.level);ERS_Block.score=0;ERS_Block.scoreField.setText(""+ERS_Block.score);}scr.requestFocus();break;casebutton_pause:if(pause_resume){ERS_Block.timer.suspend();pause_resume=false;}else{ERS_Block.timer.resume();pause_resume=true;}scr.requestFocus();break;casebutton_quit:System.exit(0);}}}//方塊類classBlock{staticint[][]pattern={{0x0f00,0x4444,0x0f00,0x4444},//用十六進至表示,本行表示長條四種狀態(tài){0x04e0,0x0464,0x00e4,0x04c4},{0x4620,0x6c00,0x4620,0x6c00},{0x2640,0xc600,0x2640,0xc600},{0x6220,0x1700,0x2230,0x0740},{0x6440,0x0e20,0x44c0,0x8e00},{0x0660,0x0660,0x0660,0x0660}};intblockType;//塊的模式號(0-6)intturnState;//塊的翻轉(zhuǎn)狀態(tài)(0-3)intblockState;//快的下落狀態(tài)introw,col;//塊在畫布上的坐標GameCanvasscr;//塊類的構(gòu)造方法Block(GameCanvasscr){this.scr=scr;blockType=(int)(Math.random()*1000)%7;turnState=(int)(Math.random()*1000)%4;blockState=1;row=scr.getInitRow();col=scr.getInitCol();}//重新初始化塊,并顯示新塊publicvoidreset(){blockType=(int)(Math.random()*1000)%7;turnState=(int)(Math.random()*1000)%4;blockState=1;row=scr.getInitRow();col=scr.getInitCol();dispBlock(1);}//實現(xiàn)“塊”翻轉(zhuǎn)的方法publicvoidleftTurn(){if(assertValid(blockType,(turnState+1)%4,row,col)){dispBlock(0);turnState=(turnState+1)%4;dispBlock(1);}}//實現(xiàn)“塊”的左移的方法publicvoidleftMove(){if(assertValid(blockType,turnState,row,col-1)){dispBlock(0);col--;dispBlock(1);}}//實現(xiàn)塊的右移publicvoidrightMove(){if(assertValid(blockType,turnState,row,col+1)){dispBlock(0);col++;dispBlock(1);}}//實現(xiàn)塊落下的操作的方法publicbooleanfallDown(){if(blockState==2)return(false);if(assertValid(blockType,turnState,row-1,col)){dispBlock(0);row--;dispBlock(1);return(true);}else{blockState=2;dispBlock(2);return(false);}}//判斷是否正確的方法booleanassertValid(intt,ints,introw,intcol){intk=0x8000;for(inti=0;i1;}}returntrue;}//同步顯示的方法publicsynchronizedvoiddispBlock(ints){intk=0x8000;for(inti=0;i1;}}}}//定時線程classMyTimerextendsThread{GameCanvasscr;publicMyTimer(GameCanvasscr){this.scr=scr;}publicvoidrun(){while(true){try{sleep((10-ERS_Block.level+1)*100);}catch(InterruptedExceptione){}if(!scr.getBlock().fallDown()){scr.deleteFullLine();if(scr.isGameEnd()){ERS_Block.isPlay=false;suspend();}elsescr.getBlock().reset();}}}}classWinListenerextendsWindowAdapter{publicvoidwindowClosing(WindowEventl){System.exit(0);}}------------------有機會一起學習~
View動畫的特殊使用場景,比如:
在ViewGroup中可以控制子元素的出場效果
在Activity中可以實現(xiàn)不同Activity之間的切換效果,
關(guān)于Activity切換這點,這篇帖子就不細說了無非就是overridePendingTransition的使用,本文主要要說的是LayoutAnimation
LayoutAnimatioon
LayoutAnimation作用于ViewGroup,為ViewGroup指定一個動畫,這樣他的子元素出場時都會具有這種動畫
LayoutAnimatioon中的屬性:
android:delay="0.5"
表示子元素開始動畫的延遲時間,比如子元素入場動畫的時間周期為300ms,那么0.5表示每個子元素都需要延遲150ms才能播放入場動畫,也就是說:第一個子元素延遲150ms,第二個子元素延遲300ms。
android:animationOrder="normal"
表示元素動畫的順序,有三種選項分別是:
A:nromal--表示順序顯示
B:reverse--表示逆向顯示
C:random--表示隨機顯示
android:animation="@anim/anim_item"
為子元素指定具體的入場動畫
LayoutAnimatioon的使用遵循以下幾個步驟:
定義LayoutAnimation
layoutAnimation xmlns:android=""
android:animation="@anim/anim_item"
android:animationOrder="normal"
android:delay="0.5"
/layoutAnimation
為子元素指定具體的入場動畫
?xml version="1.0" encoding="utf-8"?
set xmlns:android=""
android:duration="600"
android:interpolator="@android:anim/accelerate_interpolator"
android:shareInterpolator="true"
alpha
android:fromAlpha="0"
android:toAlpha="1.0" /
translate
android:fromXDelta="500"
android:toXDelta="0" /
/set
為ViewGroup指定android:layoutAnimation屬性:
在xml布局文件中指定android:layoutAnimation屬性:
ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fff4f7f9"
android:cacheColorHint="#00000000"
android:divider="#dddbdb"
android:dividerHeight="1.0px"
android:layoutAnimation="@anim/layout_animation"
android:listSelector="@android:color/transparent"
/
或者,可以在java代碼中通過LayoutAnimationController來指定:
ListView listview = (ListView) findViewById(R.id.listview);
Animation animation = AnimationUtils.loadAnimation(TestAnimActivity.this, R.anim.anim_item);
LayoutAnimationController controller = new LayoutAnimationController(animation);
controller.setDelay(0.5f);
controller.setOrder(LayoutAnimationController.ORDER_NORMAL);
listview.setLayoutAnimation(controller);
然后正常使用ViewGroup(比如ListView)即可
怎么樣,如此簡單就能做出一個炫酷的ListView特效,so easy!
class NoLowerLetterException extends Exception {
public NoLowerLetterException(String msg) {
super(msg);
}
}
class NoDigitException extends Exception {
public NoDigitException(String msg) {
super(msg);
}
}
class People {
void printLetter(char c) {
if (c = 'a' c = 'z') {
System.out.println(c);
} else {
try {
throw new NoLowerLetterException(String.valueOf(c));
} catch (NoLowerLetterException e) {
e.printStackTrace();
}
}
}
void printDigit(char c) {
if (c = '0' c = '9') {
System.out.println(c);
} else {
try {
throw new NoDigitException(String.valueOf(c));
} catch (NoDigitException e) {
e.printStackTrace();
}
}
}
}
public class ExceptionExample {
public static void main(String args[]) {
People people = new People();
for (int i = 0; i 128; i++) {
// 【代碼5】
// //將i轉(zhuǎn)換為char類型,執(zhí)行people.printLetter()方法,如果出現(xiàn)異常則捕獲,并輸出異常的錯誤信息!
people.printLetter((char) i);
}
for (int i = 0; i 128; i++) {
// 【代碼6】 //將i轉(zhuǎn)換為char類型,執(zhí)行people. printDigit
// ()方法,如果出現(xiàn)異常則捕獲,并輸出異常的錯誤信息!
people.printDigit((char) i);
}
}
}
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Painter extends JFrame{
/**
*
*/
private static final long serialVersionUID = 8160427604782702376L;
CanvasPanel canvas = new CanvasPanel();;
public Painter() {
super("Star");
this.add(canvas);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
public static void main(String[] args) {
new Painter();
}
}
class CanvasPanel extends JPanel implements ActionListener{
/**
*
*/
private static final long serialVersionUID = -4642528854538741028L;
private JButton[] btn = new JButton[4];
private String[] btn_name = {"+", "-", "R", "L"};
private int center_x = 200, center_y = 200, radius = 100, degree = 0;
public CanvasPanel() {
this.setPreferredSize(new Dimension(400, 500));
this.setLayout(null);
for(int i = 0; i 4; i++) {
btn[i] = new JButton(btn_name[i]);
btn[i].setBounds(160 + i * 60, 425, 50, 50);
btn[i].addActionListener(this);
this.add(btn[i]);
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
for(int i = 0; i 5; i++) {
g.drawLine( (int) (center_x + radius * Math.sin(Math.toRadians(degree + 72 * i))),
(int) (center_y - radius * Math.cos(Math.toRadians(degree + 72 * i))),
(int) (center_x + radius * Math.sin(Math.toRadians(degree + 72 * i + 144))),
(int) (center_y - radius * Math.cos(Math.toRadians(degree + 72 * i + 144))));
}
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand() == "+") {
if(radius 200)
radius += 2;
repaint();
} else if(e.getActionCommand() == "-") {
if(radius 0)
radius -= 2;
repaint();
} else if(e.getActionCommand() == "R") {
degree = (degree + 2) % 360;
repaint();
} else if(e.getActionCommand() == "L") {
degree = (degree - 2) % 360;
repaint();
}
}
}
網(wǎng)頁標題:酷炫的java代碼,優(yōu)雅代碼java
新聞來源:http://vcdvsql.cn/article16/hedsgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、外貿(mào)網(wǎng)站建設(shè)、移動網(wǎng)站建設(shè)、用戶體驗、網(wǎng)站營銷、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)