首先 java網(wǎng)站是基于jdk運行的。你得先裝jdk。去官網(wǎng)下載一個jdk安裝。然后你得編譯你的項目,打包到容器(tomcat,weblogic,jboss等)中運行即可。再提醒一下就是,看看你的源代碼有木有用到數(shù)據(jù)庫或者其他類型的服務。如果有的話,你得裝數(shù)據(jù)庫或服務,并且初始化數(shù)據(jù)。再啟動你的你的容器。
創(chuàng)新互聯(lián)公司10多年企業(yè)網(wǎng)站制作服務;為您提供網(wǎng)站建設,網(wǎng)站制作,網(wǎng)頁設計及高端網(wǎng)站定制服務,企業(yè)網(wǎng)站制作及推廣,對成都銅雕雕塑等多個行業(yè)擁有豐富的網(wǎng)站制作經(jīng)驗的網(wǎng)站建設公司。
1、使用工具--java service wrapper
2、新建一個文件夾,在文件夾目錄下再分別創(chuàng)建lib,bin,conf,logs,classes文件夾
3、將下載的wrapper的文件夾中的wrapper.jar,wrappertest.jar,wrapper.dll復制到新建的lib文件夾下,
將InstallApp-NT.bat,PauseApp-NT.bat,ResumeApp-NT.bat,StartApp-NT.bat,StopAppNT.bat,UninstallApp- NT.bat以及wrapper.exe復制到bin目錄下;
將wrapper.conf復制到conf目錄下;
將wrapper.log復制到logs目錄下;
將要安裝成服務的java程序打成jar包(這里我的是TestServer.jar),連同其他需要的jar包一并放到 classes 目錄下。
4、配置conf目錄下wrapper.conf文件:
這里僅僅列出需要修改的地方
4.1 wrapper.java.command=java
指明jre,如果本機已配置了jre,那么此項不需更改;否則的話,需要將jre復制到wrapper路徑下
(和bin在 同一級)
同時修改wrapper.java.command=../jre/bin/java.exe
4.2將程序運行需要的jar包都列出來wrapper.jar是必需的
wrapper.java.classpath.1=../lib/wrapper.jar
wrapper.java.classpath.2=../classes/TestServer.jar
wrapper.java.classpath.2=../classes/classes12.jar
4.3指定程序的主類
wrapper.app.parameter.1=test.TestServer
4.4控制臺運行時的名稱
wrapper.console.title=TestServer
4.5指定服務的名稱
wrapper.ntservice.name=TestServer
4.6windows服務的顯示名稱
wrapper.ntservice.displayname=TestServer
4.7服務描述
wrapper.ntservice.description=TestServer
4.8啟動模式,默認是自啟動AUTO_START or DEMAND_START
wrapper.ntservice.starttype=AUTO_START
5、運行InstallApp-NT.bat安裝服務,運行StartApp-NT.bat啟動服務
出現(xiàn)異常錯誤可以查看logs目錄下的log文件
6注意事項:
6.1. 不要改變文件的相對路徑
6.2. 安裝好服務后,不要移動文件和文件夾
6.3. 也許您該定期清理logs/wrapper.log日志文件,防止日志文件過大
6.4. 備份好數(shù)據(jù)庫和數(shù)據(jù)文件,定期查看
可以參考
Java對于服務器 個人電腦和移動設備來說是一項偉大的技術 由于需要java的跨平臺的特性 因此java在服務器和移動設備方面的應用是非常成功的 但java在個人電腦應用方面的情況和在服務器及移動設備方面的應用有所不同 但是這很快就會有所改變 至少比你想象得要快 在這篇文章中 我會分析一下java在桌面環(huán)境中的應用將怎樣得到提升 然后具體說一下java GUI(用戶圖形接口)的三個主要的工具:AWT Swing 和SWT 在下文中 我將會開發(fā)一個完整的java桌面應用程序 Java與桌面端 現(xiàn)在 流行的桌面平臺要數(shù)Windows Mac and Linux了 但它們不是十全十美的 Windows主宰著桌面操作系統(tǒng)的市場 其上有巨大的應用和開發(fā)群體 但它昂貴且有許多安全漏洞 Linux有著穩(wěn)固的基礎 它是開源的軟件 比Windows更可靠 Macs非常容易操作且不是黑客的目標 但與Windows和Linux比起來 Mac的硬件和軟件可選的余地非常的有限 公司和個人選擇他們的操作系統(tǒng)基于許多因素 花費少且安全性高是首選的因素 這導致一些組織從Windows 系統(tǒng)轉而選擇Linux 對許多用戶來說 可用性及對原有應用程序的支持是非常重要的因素 這意味著Windows 將繼續(xù)享有巨大的市場 Mac有其自己忠誠的用戶 這使得蘋果機仍然可以存活 Linux 在桌面的流行及Mac的成功創(chuàng)造了多樣性 這種多樣性正是Java需要的 這種多樣性使得Java在桌面有舉足輕重的地位 跨平臺的支持 Java 運行于所有相關的操作系統(tǒng) 包括Windows Mac和Linux 對于任何組織 他想把現(xiàn)有的應用從一個操作系統(tǒng)移植到另一個操作系統(tǒng)而不用做太多的改動 那么Java正是他們首選的桌面開發(fā)平臺 或許用微軟的可視化工具很容易構建 NET應用 但是這將使你被綁定在了Windows平臺上了 很多人也許想立刻用Linux 代替Windows 從而避免由微軟件操作系統(tǒng)的漏洞帶來的問題 用戶不能容忍的問題之一是當從Windows移植到Linux帶來的巨大的費用 如果你的應用程序用Java構建 你就沒有了這些問題 Java的圖形用戶界面看上去會跟你用的操作系統(tǒng)一樣 而并不需要做什么改動 假如有一天又有一種桌面操作系統(tǒng)出現(xiàn)的話 java 是個安全的賭注 因為它現(xiàn)在能夠運行在Windows和Linux 上 那么可以推測它也可以運行在將來可能出現(xiàn)的操作系統(tǒng)上 這些操作系統(tǒng)可能或遲或早地由微軟 或是開源社區(qū) 或是其它的人開發(fā)出來 豐富的特征 最初 Java只有非常有限的一些特征去構建圖形用戶界面 思想就是用平臺無關的Java應用程序接口打包不同的操作系統(tǒng)的本地圖形用戶界面 稱之為抽象的窗口工具 僅有普通的部件如文件域 文本區(qū) 選擇框 單選按鈕 列表框和按鈕被AWT支持 圖形和圖像的特性支持非常有限 也就是說 只足夠構建簡單的applet程序 認識到需要更高級的圖形用戶界面組件和圖形能力 Sun公司開發(fā)了Swing Java D Java D 圖像的輸入/輸出 Java高級圖像(JAI)和很多其它的 這些中的一些窗體組件現(xiàn)在已經(jīng)是Java 標準版(J SE)里的一部分 并且其它的一些擴展必須和你的應用程序打包在一起 例如Swing Java D 圖像的輸入/輸出都是Java的核心API 隨著Java開發(fā)工具包(JDK)和Java運行環(huán)境一起提供 讓我們不要忘了J EE平臺 如果你開發(fā)服務器端的應用程序并且需要豐富的圖形用戶界面 那么你毫無疑問應該選擇Java 這允許你把服務器端的一些代碼移到客戶端 反之亦然 例如 一個項目可能開始是基于WEB和圖形界面 在某些時候 用戶可能要求圖形元素不能在HTML中實現(xiàn) 如果你選擇java做客戶端應用 那么你可以重用這些當初用來做服務器端的代碼 如果你用遠程調用 一些類會真正地實現(xiàn)服務器和客戶端的共享 通過頁面服務器 Java桌面應用也能夠和其它的Java 或非Java應用程序通信 如CORBA TCP/IP 或是 HTTP Java圖形界面工具 Java有三個主要的圖形界面工具 AWT Swing和SWT Swing 是構建java圖形界面標準的API(應用程序接口) 一些AWT類由Swing基礎而來 SWT是一個非常有前途的新的窗體工具 由IBM資助 但是事實上 這三者相互補充 他們滿足不同的需求 AWT 抽象窗口工具集為簡單的applet程序設計 它不適宜用來構建豐富的桌面圖形界面 但是從開始被介紹 它至少有一個好的思想就是布局管理 它負責為組件找到一個放置的位置 這種機制是必需的 因為GUI組件在不同的操作系統(tǒng)中有不同的尺寸 現(xiàn)在 AWT擴展了組件模型和事件處理機制(由JavaBeans說明定義) 新的圖形API(稱為Java D) 支持剪貼板和拖拉操作 打印 準入 和新的GUI工具Swing 所有這些都歸到Java基礎類中(JFC) Swing Swing是曾經(jīng)開發(fā)的最復雜的GUI之一 它有一套完全的組件從按鈕到文件域到表格 樹型和文件編輯器 這些組件不依賴于操作系統(tǒng)本地的部件 而是用原始的圖形像直線 矩形 文字畫出 這種畫代表感觀插件 它能夠模仿本地的感觀 Swing也有平臺無關的外觀稱為 Metal Swing的結構由MVC模式得到啟發(fā) 這里在屏幕上的視覺GUI組件和支持數(shù)據(jù)的模型對象之間有一個明顯的分隔 在GUI和數(shù)據(jù)層之間的通訊基于事件 在最初的Swing版本中有許多錯誤并且有執(zhí)行問題 這減慢了接受它的速度 Swing最大的問題是被從事于并且許多人相信它是為開發(fā)桌面應用而準備的 今天 有許多基于Swing開發(fā)的商業(yè)產(chǎn)品 包括大多數(shù)的Java集成開發(fā)工具 我所喜歡的集成開發(fā)工具是Jbuilder 它的速度相當?shù)目? SWT SWT是IBM為它的Eclipse集成開發(fā)環(huán)境而開發(fā)的圖形用戶界面工具 SWT可以在Eclipse環(huán)境外使用 而且提供對操作系統(tǒng)本地圖形用戶界面的直接訪問 因此 基于SWT的Java應用程序擁有本地的圖形用戶界面并且可以和本地別的應用程序和部件集成在一起 假如你的桌面應用程序產(chǎn)生HTML報表 你想把它顯示給用戶看 你可以使用Swing去瀏覽簡單的HTML文檔 但這不是一個理想的的解決方案 最好是在你的應用程序里提供IE或者Mozilla瀏覽器引擎 SWT社區(qū)現(xiàn)在正在設計瀏覽器API 這些API可以讓你產(chǎn)生基于IE或者Mozilla的HTML窗口 SWT現(xiàn)在可以在AIX HPUX Linux QNX Solaris and Windows下面運行 Mac OS X is 也在進行之中 誤解與Bug 對于java/Swing一直有著誤解 諸如 Java/Swing太慢了 或者是Java/Swing需要更多的內存 Swing也許在老式的奔騰的cpu而且只有 m內存運行JDK 運行起來卻是很慢 但是如果在PIII級別的CPU有著 mb的內存 運行JDK 環(huán)境是足夠快的 對于一個應用程序來說鼠標在 毫秒和在 毫秒的反映的區(qū)別 對于使用者來說看起來是 沒什么區(qū)別的 Java在企業(yè)級的數(shù)百人 上千人同時在線的服務器表現(xiàn)的很好 Java在對于有限資源的移動設備上的表現(xiàn)也是很出色的 那為什么Java不能成為很好的桌面應用程序呢?以我的觀點看 Swing的bug比其運行速度慢這問題還嚴重 例如 如果你用的是JDK 你將不能在表格(稱為JTable)中輸入% ($#!q 等這些字符 這八個字符和箭頭鍵及Home End Pgup and Pgdn這幾個鍵的鍵值是相同的 其中一個由JTable由到的類調用了KeyEvent getCharCode()方法代替KeyEvent getKeyCode() 這個bug這JDK 已經(jīng)得到了糾正 你大概已經(jīng)放棄過Swing 如果你是從用JDK 的Swing 你可能因為你不能在表格里輸入q而惱怒 可能不幸的是你正需要用Jtable開發(fā)一個Swing應用 你將花費許多時間從sun的bug數(shù)據(jù)庫中查找解決的辦法 但沒有發(fā)現(xiàn)你需要的(記住在那時Swing還是個新事物) 你將花費更多的時間去看Swing的源代碼和發(fā)展中的工作區(qū) 經(jīng)過了這個的經(jīng)歷之后 很少有人很在另一個項目里再用Swing了 你的工作區(qū)會像下面這樣子 import java awt *; import java awt event *; import javax swing *; import javax swing table *; public class WorkingTable extends JTable { public static final boolean JDK = System getProperty( java version ) startsWith( ); public void processKeyEvent(KeyEvent e) { if (JDK ) { char ch = e getKeyChar(); if (e getID() == KeyEvent KEY_TYPED (( = ch ch = 40) || ch == 'q')) { int anchorRow = getSelectionModel().getAnchorSelectionIndex(); int anchorColumn = getColumnModel() .getSelectionModel().getAnchorSelectionIndex(); if (anchorRow != -1 anchorColumn != -1) { if (!isEditing()) editCellAt(anchorRow, anchorColumn); Component editorComp = getEditorComponent(); if (isEditing() editorComp instanceof JTextField) { JTextField textField = (JTextField) editorComp; textField.setText(textField.getText() + ch); return; } } } } super.processKeyEvent(e); } } 不幸的是,Swing有許多像上面描述的那樣的問題,一些問題很難解決,需要做大量的工作。Tw.WInGwiT.例如,Swing的打開文件和保存文件的對話框是基于稱為JfileChooser的組件,它部分的執(zhí)行了JDK 1.2和JDK 1.3(一些特性總是不能用的,要創(chuàng)建一個新的目錄對大多數(shù)用戶來是一個挑戰(zhàn))。我不知道為什么Sun需要幾年的時間直到jdk1.4中才完成JfileChooser。在JDK 1.4之前,你有兩種選擇:用這種破爛的JfileChooser或是創(chuàng)建你自己的文件選擇框,Borland公司在他們的JBuilder 4中做一個很好的文件打開對話框。然而,大多數(shù)的開發(fā)者用的是標準的JfileChooser,給他們的用戶帶來許多問題。有一件重要的事情需要注意:可以像上面描述的那個去創(chuàng)建工作環(huán)境,因為Swing的源代碼是可以得到的。學習java源代碼也能夠讓你成為更好的程序員并且讓你理解工作在Java API的內部機制。當你開發(fā)你自己習慣的GUI組件,這點是有用 lishixinzhi/Article/program/Java/hx/201311/26851
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioSystem;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Rectangle;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JSlider;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;
import java.util.Vector;
public class Frame extends JFrame implements Runnable {
JPanel contentPane;
JPanel jPanel1 = new JPanel();
JButton jButton1 = new JButton();
JSlider jSlider1 = new JSlider();
JLabel jLabel1 = new JLabel();
JButton jButton2 = new JButton();
JLabel jLabel2 = new JLabel();
int count = 1, rapidity = 80; // count 當前進行的個數(shù), rapidity 游標的位置
int zhengque = 0, cuowu = 0;
int rush[] = { 10 ,20 ,30 }; //游戲每關的個數(shù) 可以自由添加.列 { 10 ,20 ,30 ,40,50}
int rush_count = 0; //記錄關數(shù)
char list[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; //隨機出現(xiàn)的數(shù)字 可以自由添加
Vector number = new Vector();
String paiduan = "true";
AudioClip Musci_anjian, Music_shibai, Music_chenggong;
public Frame() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
//-----------------聲音文件---------------------
Musci_anjian = Applet.newAudioClip(new File("sounds//anjian.wav")
.toURL());
Music_shibai = Applet.newAudioClip(new File("sounds//shibai.wav")
.toURL());
Music_chenggong = Applet.newAudioClip(new File(
"sounds//chenggong.wav").toURL());
//---------------------------------------
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
/**
* Component initialization.
*
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
setSize(new Dimension(588, 530));
setTitle("Frame Title");
jPanel1.setBorder(BorderFactory.createEtchedBorder());
jPanel1.setBounds(new Rectangle(4, 4, 573, 419));
jPanel1.setLayout(null);
jButton1.setBounds(new Rectangle(277, 442, 89, 31));
jButton1.setText("開始");
jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
jSlider1.setBounds(new Rectangle(83, 448, 164, 21));
jSlider1.setMaximum(100);
jSlider1.setMinimum(1);
jSlider1.setValue(50);
jLabel1.setText("速度");
jLabel1.setBounds(new Rectangle(35, 451, 39, 18));
jButton2.setBounds(new Rectangle(408, 442, 89, 31));
jButton2.setText("結束");
jButton2.addActionListener(new Frame1_jButton2_actionAdapter(this));
jLabel2.setText("第一關:100個");
jLabel2.setBounds(new Rectangle(414, 473, 171, 21));
contentPane.add(jPanel1);
contentPane.add(jButton2);
contentPane.add(jButton1);
contentPane.add(jSlider1);
contentPane.add(jLabel1);
contentPane.add(jLabel2);
this.addKeyListener(new MyListener());
jButton1.addKeyListener(new MyListener());
jSlider1.addKeyListener(new MyListener());
jSlider1.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
rapidity = jSlider1.getValue();
}
});
}
public void run() {
number.clear();
zhengque = 0;
cuowu = 0;
paiduan = "true";
while (count = rush[rush_count]) {
try {
Thread t = new Thread(new Tthread());
t.start();
count += 1;
Thread.sleep(1000 + (int) (Math.random() * 2000)); // 生產(chǎn)下組停頓時間
// 最快1快.最慢2秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
while (true) { // 等待最后一個字符消失
if (number.size() == 0) {
break;
}
}
if (zhengque == 0) { // 為了以后相除..如果全部正確或者錯誤就會出現(xiàn)錯誤. 所以..
zhengque = 1;
}
if (cuowu == 0) {
cuowu = 1;
}
if (paiduan.equals("true")) { // 判斷是否是自然結束
if (zhengque / cuowu = 2) {
JOptionPane.showMessageDialog(null, "恭喜你過關了");
rush_count += 1; // 自動加1關
if (rush_count rush.length) {
if (rapidity 10) { // 當速度大于10的時候在-5提加速度.怕速度太快
rapidity -= 5; // 速度自動減10毫秒
jSlider1.setValue(rapidity); // 選擇位置
}
Thread t = new Thread(this);
t.start();
} else {
JOptionPane.showMessageDialog(null, "牛B...你通關了..");
rush_count = 0;
count = 0;
}
} else {
JOptionPane.showMessageDialog(null, "請再接再勵");
rush_count = 0;
count = 0;
}
} else {
rush_count = 0;
count = 0;
}
}
public void jButton1_actionPerformed(ActionEvent e) {
Thread t = new Thread(this);
t.start();
}
public void jButton2_actionPerformed(ActionEvent e) {
count = rush[rush_count] + 1;
paiduan = "flase";
}
class Tthread implements Runnable {
public void run() {
boolean fo = true;
int Y = 0, X = 0;
JLabel show = new JLabel();
show.setFont(new java.awt.Font("宋體", Font.PLAIN, 33));
jPanel1.add(show);
X = 10 + (int) (Math.random() * 400);
String parameter = list[(int) (Math.random() * list.length)] + "";
Bean bean = new Bean();
bean.setParameter(parameter);
bean.setShow(show);
number.add(bean);
show.setText(parameter);
while (fo) {
// ---------------------數(shù)字下移--------------------
show.setBounds(new Rectangle(X, Y += 2, 33, 33));
try {
Thread.sleep(rapidity);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (Y = 419) {
fo = false;
for (int i = number.size() - 1; i = 0; i--) {
Bean bn = ((Bean) number.get(i));
if (parameter.equalsIgnoreCase(bn.getParameter())) {
cuowu += 1;
jLabel2.setText("正確:" + zhengque + "個,錯誤:" + cuowu
+ "個");
number.removeElementAt(i);
Music_shibai.play();
break;
}
}
}
}
}
}
class MyListener extends KeyAdapter {
public void keyPressed(KeyEvent e) {
String uu = e.getKeyChar() + "";
for (int i = 0; i number.size(); i++) {
Bean bean = ((Bean) number.get(i));
if (uu.equalsIgnoreCase(bean.getParameter())) {
zhengque += 1;
number.removeElementAt(i);
bean.getShow().setVisible(false);
jLabel2.setText("正確:" + zhengque + "個,錯誤:" + cuowu + "個");
Music_chenggong.play();
break;
}
}
Musci_anjian.play();
}
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception exception) {
exception.printStackTrace();
}
Frame frame = new Frame();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
frame.setVisible(true);
}
}
class Frame1_jButton2_actionAdapter implements ActionListener {
private Frame adaptee;
Frame1_jButton2_actionAdapter(Frame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton2_actionPerformed(e);
}
}
class Frame1_jButton1_actionAdapter implements ActionListener {
private Frame adaptee;
Frame1_jButton1_actionAdapter(Frame adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}
class Bean {
String parameter = null;
JLabel show = null;
public JLabel getShow() {
return show;
}
public void setShow(JLabel show) {
this.show = show;
}
public String getParameter() {
return parameter;
}
public void setParameter(String parameter) {
this.parameter = parameter;
}
}