-
2021-04-18 04:26:08
转:https://www.ttin.top/2018/03/29/TT0012/
制作一个小软件的方法很多,比如说c++的MFC,本站在之前的第一个MFC文章里就提到过;matlab的GUIDE,在之前的如何用Matlab设计GUI? 文章也提到过。而现在,本文将使用matlab GUI来制作一个可安装到电脑的小软件。
提示:软件安装包请到本站下载中心下载(解压密码到“关于”联系作者获取)
首先,描述一下软件需求
作者想制作一个可以为自己记录计划的软件,该软件应当包含以下功能:
1.增加新计划,并保存计划;
2.删除已有计划,更改当前计划;
3.查看历史计划;
4.显示当月日历,浏览其他日历(比如说查看学校校历等);
其次,matlab GUI设计软件界面
在本站前面内容已经提到过如何设计matlab GUI,在此就不做详细描述了。
如下图所示,使用matlab GUI设计如下界面。
其中,红色区域为主要功能区,其余部分可不设计。
然后,matlab 程序编写
访问日历网页(比如说查看学校校历等) txt = get(handles.edit1,'string');
eval(['web',' ',txt])
初始化当月计划 set(handles.uitable1,'data',[]);
添加计划 content1 = get(handles.edit4,'string');
content2 = get(handles.edit5,'string');
content3 = get(handles.edit6,'string');
uitabledata = get(handles.uitable1,'data');
handles.uitabledata = uitabledata;
guidata(hObject,handles);
olddata = uitabledata;
newrow = {content1 content2 content3};
newdata = [olddata;newrow];
set(handles.uitable1,'data',newdata);
删除计划 uitabledata = get(handles.uitable1,'data');
handles.uitabledata = uitabledata;
guidata(hObject,handles);
olddata = uitabledata;
[a,~] = size(olddata);
olddata(a,:) = [];
newdata = olddata;
set(handles.uitable1,'data',newdata);
保存计划 uitabledata = get(handles.uitable1,'data');
%写
txt = get(handles.edit3,'string');
filename = [txt(1:4),'_',txt(8:9),'.xls'];
delete(filename)
mytxt = xlswrite(filename,uitabledata);
查看以往计划 [pname,adrname] = uigetfile('*.xls');
%读
filename = [adrname pname];
[~,~,rawdata] = xlsread(filename);
set(handles.uitable1,'data',rawdata);
显示当月日历 dayunm = calendar(year(now),month(now));
myday = num2cell(dayunm);
myW1 = {'日' '一' '二' '三' '四' '五' '六'};
myW2 = {'一';'二';'三';'四';'五';'六'};
[a,b] = find(dayunm==day(now));
myday{a,b} = ['' num2str(myday{a,b}) ''];
[aa,bb] = find(dayunm==0);
for i=1:size(aa)
myday{aa(i),bb(i)} = ['' num2str(myday{aa(i),bb(i)}) ''];
end
set(handles.uitable2,'data',myday);
set(handles.uitable3,'data',myW1);
set(handles.uitable4,'data',myW2);
显示当月计划 filename = [num2str(year(now)),'_',datestr(date,'mm'),'.xls'];
if exist(filename,'file') == 0
uitabledata = {'无计划' '无计划' '无计划'};
mytxt = xlswrite(filename,uitabledata);
%读
[~,~,rawdata] = xlsread(filename);
set(handles.uitable1,'data',rawdata);
else
%读
[~,~,rawdata] = xlsread(filename);
set(handles.uitable1,'data',rawdata);
end
最后,软件打包
在matlab命令行窗口输入deploytool,添加自己的文件后打包即可。(方法在百度上一搜索一大把!我就懒得说了!)
更多相关内容 -
运用Java制作一个属于自己的音乐播放软件
2021-01-23 19:37:05上个寒假小编用python做了一个音乐播放软件,觉得那个效果还不怎么的,这个学期学了一下Java,于是今天用Java做了一个音乐播放软件,个人觉得这个播放软件有了一点质的飞跃,不知到大家觉得怎么样?运用Java制作一个属于自己的音乐播放软件
前言
上个寒假小编用python做了一个音乐播放软件(博客链接为:)运用tkinter、爬虫做了一个播放音乐的小程序(动态显示歌词【歌词向上翻滚】),觉得效果不怎么的,于是今天小编用Java做了一个播放软件,个人觉得这个有了一点质的飞跃,毕竟python图形界面从某些方面讲不如Java。在这里声明一下:本编文章仅供学习,切莫用于商业活动,一经被相关人员发现,本小编概不负责!希望读者切记!!
运用Java实现音乐播放器
1.需要的python模块
虽然我题目讲的是运用Java做的,但是还是用到了python,而且python的部分很重要,所以小编首先讲的是需要的python模块。
需要的模块有requests、sys、urllib.parse、json
其中requests和urllib.parse主要用于爬取歌曲信息用的,json数据用于解析得到的json数据,sys主要用于传递参数用的。
还记得如下这个吗?from sys import argv sum=int(argv[1])+int(argv[2]) print(sum)
运行结果:
2.实现的两个python代码
首先,在给出代码之前,我想讲一下具体是怎样实现这个播放软件的,小编是写了两个python代码程序,分别为music2.py和music.py,music2.py通过传入的歌曲名称,会产生两个.txt文件,分别存储搜索得到的歌曲信息和与之对应的歌曲id和hash值,music.py通过传入的歌曲id和hash值下载歌曲和歌词.
然后写了两个Java线程让播放歌曲和歌词流动同步(不设置线程只能等其中的任何一个结束之后才能执行另外一个)。
当然,读者在看小编下面的两个代码的时候,或许会存在一些疑问,小编在这里先给出另外一边博客的地址,看了这篇博客,读者应该会理解两个python代码程序的作用了。博客链接为:酷狗音乐参考代码如下:
music2.py
from sys import argv from urllib.parse import quote import requests import json keyword=argv[1] encodeName=quote(keyword) url='https://songsearch.kugou.com/song_search_v2?callback=jQuery1124042761514747027074_1580194546707&keyword=%s&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1580194546709'%(encodeName) headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3756.400 QQBrowser/10.5.4039.400'} response=requests.get(url=url,headers=headers) str2=response.text str2 = str2[str2.find('(') + 1:str2.rfind(')')] dict2 = json.loads(str2) music_list = dict2['data']['lists'] hash_list = list() musicNames=list() for id in range(len(music_list)): music_name=music_list[id]['FileName'].replace('<em>', '').replace('</em>', '') musicNames.append(music_name) hash_list.append([music_list[id]['FileHash'],music_list[id]['AlbumID']]) with open(file='D:/intell/Clock/src/file/{}Names.txt'.format(keyword),mode='a',encoding='utf-8') as f: for i in range(len(musicNames)): f.writelines(musicNames[i]+"\n") with open(file='D:/intell/Clock/src/file/{}hash.txt'.format(keyword),mode='a',encoding='utf-8') as f: for i in range(len(hash_list)): f.writelines(hash_list[i][0]+'\t'+hash_list[i][1]+"\n")
music.py
from sys import argv import requests import json hash=argv[1] id=argv[2] keyword=argv[3] if(id=="0"): id="" url='https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash=%s&album_id=%s&dfid=2SSV0x4LWcsx0iylej1F6w7P&mid=44328d3dc4bfce21cf2b95cf9e76b968&platid=4' headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3756.400 QQBrowser/10.5.4039.400'} url=url%(hash,id) response=requests.get(url=url,headers=headers) dict2=json.loads(response.text) music_info=dict2['data']['lyrics'] # 歌曲信息 url2=dict2['data']['play_url'] with open(file="D:/intell/Clock/src/file2/{}.txt".format(keyword),mode="w",encoding="utf-8") as f: f.write(music_info) response2=requests.get(url=url2,headers=headers) with open(file="D:/intell/Clock/src/file2/{}.mp3".format(keyword),mode="wb") as f: f.write(response2.content) print("1")
3.Java程序部分
在2的时候讲了Java调用python,那么具体怎样调用呢?
看了这张图片,读者是不是发现这个和第1点的运行结果是不是很相似,当然这个的完成小编觉得应该要配置python环境变量的(不过,小编想读者都应该配置好了吧!)
当然了,读者还需要再src文件夹下面新建两个如下的文件夹,另外,读者运行一次这个程序之后,最好把文件夹file里面的文件全部删除,否则下次运行的时候会出一定错误,file2不需要任何操作。
4.全部Java代码
import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.net.URL; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import javax.sound.sampled.*; public class music extends JFrame { private JPanel topPanel; private JPanel CenterPanel2; private JPanel centerPanel; private JPanel bottomPanel; private JLabel label; private JTextField textField; private JButton button; private DefaultListModel<String> listModel; // 列表框 private JList<String> jList; private List<String> list; private List<String> list2; private Integer index=0; private String hash; //歌曲的hash码 private String id; // 歌曲的id码 private String musicName; // 歌曲名 private Font font; private JToolBar toolBar; //工具栏 private JButton ssButton; private JButton bfButton; private JButton zbButton; private JPanel textPanel2; private Integer num=0; private List<String> music_words2; private Timer timer; private int num2=0; private int num3=1; private Integer time; private JTextArea textArea; private JLabel label2; public music(){ super("某某音乐"); topPanel=new JPanel(); topPanel.setSize(1000,60); label=new JLabel("歌曲名:"); topPanel.add(label,FlowLayout.LEFT); font=new Font("华文宋体",Font.BOLD,20); textField=new JTextField(); textField.setColumns(22); textField.setFont(font); topPanel.add(textField,FlowLayout.CENTER); button=new JButton("搜索"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { String keyword=textField.getText(); write_file(keyword); setList(list,keyword+"Names"); listModel.clear(); jList.repaint(); for(int i=0;i<list.size();i++) listModel.insertElementAt(list.get(i),i); jList.repaint(); centerPanel.repaint(); } catch (Exception ex) { ex.printStackTrace(); } } }); topPanel.add(button,FlowLayout.RIGHT); CenterPanel2=new JPanel(); CenterPanel2.setSize(1000,700); CardLayout cardLayout=new CardLayout(); CenterPanel2.setLayout(cardLayout); centerPanel=new JPanel(); centerPanel.setSize(1000,700); list=new LinkedList<>(); list2=new LinkedList<>(); listModel=new DefaultListModel<String>(); jList = new JList<String>(listModel); jList.setFont(font); jList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); jList.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { setIndex(jList.getSelectedIndex()); setMusicName(jList.getSelectedValue()); } }); JScrollPane scrollPane1 = new JScrollPane(jList); scrollPane1.setPreferredSize(new Dimension(900, 700)); centerPanel.add(scrollPane1); CenterPanel2.add(centerPanel,"0"); textArea=new JTextArea(); textArea.setSize(900,700); textArea.setFont(font); textArea.setEditable(false); textPanel2=new JPanel(); textPanel2.add(textArea); CenterPanel2.add(textPanel2,"1"); bottomPanel=new JPanel(); toolBar=new JToolBar(JToolBar.HORIZONTAL); zbButton=new JButton(getImage("sx")); zbButton.setToolTipText("转变"); zbButton.setFont(font); zbButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(num==0){ cardLayout.show(CenterPanel2,"1"); num+=1; }else{ cardLayout.show(CenterPanel2,"0"); num=0; } } }); toolBar.add(zbButton); ssButton=new JButton("缓冲"); ssButton.setFont(font); music_words2=new LinkedList<String>(); ssButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { String keyword=textField.getText(); System.out.println(keyword); setList(list2,keyword+"hash"); List<String> list3= Arrays.asList(list2.get(index).split("\t")); try{ setHash(list3.get(0)); setId(list3.get(1)); }catch (Exception ex2){ setHash(list3.get(0)); setId("0"); } download_file(hash,id,musicName); } catch (Exception ex) { ex.printStackTrace(); } } }); toolBar.add(ssButton); bfButton=new JButton(getImage("ss")); bfButton.setToolTipText("播放"); bfButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { List<String> music_words=null; try { music_words = getMusicWord(musicName); System.out.println(musicName); } catch (Exception ex) { ex.printStackTrace(); } for(int i=0;i<music_words.size();i++){ if(!("".equals(music_words.get(i)))) music_words2.add(music_words.get(i)); } List<List<String>> music_words3=new LinkedList<>(); for(int i=0;i<music_words2.size();i++){ String string=music_words2.get(i); int index=string.indexOf("]")+1; if(string.substring(index).length()!=0){ List<String> list4=new LinkedList<String>(); list4.add(string.substring(0,index)); list4.add(string.substring(index)); music_words3.add(list4); } } int len=music_words3.size(); System.out.println(len); label2.setText("音乐开始播放!"); textArea.setText(""); time=get_time("0",music_words3.get(0).get(0)); timer=new Timer(time, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(num2<28){ textArea.append(music_words3.get(num2++).get(1)+"\n"); textArea.repaint(); }else{ textArea.setText(""); for(int i=num3;i<num2;i++){ textArea.append(music_words3.get(i).get(1)+"\n"); } textArea.append(music_words3.get(num2++).get(1)+"\n"); textArea.repaint(); num3++; } if(num2>0 &&num2!=len){ time=get_time(music_words3.get(num2-1).get(0),music_words3.get(num2).get(0)); System.out.println(time); } timer.setDelay(time); // 重新设置时间间隔 String string2=label2.getText(); if(num2%2==0) label2.setText(string2+"."); if(num2==len){ label2.setText("音乐播放完毕!"); label2.repaint(); num2=0; num3=1; music_words2.clear(); timer.stop(); } System.out.println("num2:"+num2); } }); Thread thread1=new Thread(new Runnable() { @Override public void run() { timer.start(); } }); Thread thread2=new Thread(new Runnable() { @Override public void run() { play(musicName); } }); thread1.start(); thread2.start(); // 定义两个线程,让播放音乐和歌词同时执行 } }); toolBar.add(bfButton); label2=new JLabel("音乐"); Font font2=new Font("方正楷体",Font.BOLD,20); label2.setFont(font2); toolBar.add(label2); bottomPanel.add(toolBar); add(topPanel,BorderLayout.NORTH); add(CenterPanel2,BorderLayout.CENTER); add(bottomPanel,BorderLayout.SOUTH); setBounds(200,200,1000,900); setResizable(false); // 设置窗体大小为固定,不可放大 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void setIndex(Integer index) { this.index = index; } public void setMusicName(String musicName) { this.musicName = musicName; } public void setHash(String hash) { this.hash = hash; } public void setId(String id) { this.id = id; } public void setList(List<String> list, String keyword) throws Exception{ String filename=String.format("src/file/%s.txt",keyword); File file=new File(filename); if(list.size()>0){ list.clear(); } if(file.exists()){ FileReader fr=new FileReader(filename); BufferedReader bf=new BufferedReader(fr); while(bf.ready()){ list.add(bf.readLine()); } bf.close(); fr.close(); } }// 得到歌曲列表 public List<String> getMusicWord(String keyword) throws Exception { List<String> list1 = new LinkedList<String>(); String filename = String.format("src/file2/%s.txt", keyword); File file = new File(filename); if (file.exists()) { FileReader fr = new FileReader(filename); BufferedReader bf = new BufferedReader(fr); while (bf.ready()) { list1.add(bf.readLine()); } bf.close(); fr.close(); } return list1; } public ImageIcon getImage(String name){ URL url=getClass().getResource("/images/"+name+".jpg"); ImageIcon imageIcon=new ImageIcon(url); return imageIcon; } public void write_file(String keyword) throws Exception { if("".equals(keyword)){ keyword="夜航星"; } String exe = "python"; String command = "D:\\Sublime\\PyCharm\\music\\music2.py"; String[] cmdArr = new String[] {exe,command,keyword}; Process process = Runtime.getRuntime().exec(cmdArr); process.waitFor(); } public static Integer get_time(String time1,String time2){ int index1=time2.indexOf(":")+1; int index2=time2.indexOf("]"); int index3=time2.indexOf("[")+1; int time3; if("0".equals(time1)){ time3=0; }else{ time3=Integer.parseInt(time1.substring(index3,index1-1))*1000*60+(int) (Double.parseDouble(time1.substring(index1,index2))*1000); } int time4=Integer.parseInt(time2.substring(index3,index1-1))*1000*60+(int) (Double.parseDouble(time2.substring(index1,index2))*1000); return time4-time3; } public static void play(String musicName){ String filePath=String.format("src/file2/%s.mp3",musicName); try { // 文件流 AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(filePath)); // 文件编码 AudioFormat audioFormat = audioInputStream.getFormat(); // 转换文件编码 if (audioFormat.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) { System.out.println(audioFormat.getEncoding()); audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, audioFormat.getSampleRate(), 16, audioFormat.getChannels(), audioFormat.getChannels() * 2, audioFormat.getSampleRate(), false); // 将数据流也转换成指定编码 audioInputStream = AudioSystem.getAudioInputStream(audioFormat, audioInputStream); } // 打开输出设备 DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, audioFormat, AudioSystem.NOT_SPECIFIED); // 使数据行得到一个播放设备 SourceDataLine sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo); // 将数据行用指定的编码打开 sourceDataLine.open(audioFormat); // 使数据行得到数据时就开始播放 sourceDataLine.start(); int bytesPerFrame = audioInputStream.getFormat().getFrameSize(); // 将流数据逐渐写入数据行,边写边播 int numBytes = 1024 * bytesPerFrame; byte[] audioBytes = new byte[numBytes]; while (audioInputStream.read(audioBytes) != -1) { sourceDataLine.write(audioBytes, 0, audioBytes.length); } sourceDataLine.drain(); sourceDataLine.stop(); sourceDataLine.close(); } catch (Exception e) { e.printStackTrace(); } }// 播放音乐代码 public void download_file(String hash,String id,String keyword) throws Exception{ String exe = "python"; String command = "D:\\Sublime\\PyCharm\\music\\music.py"; String[] comArr = new String[]{exe, command, hash, id, keyword}; System.out.println(exe+" "+command+" "+hash+" "+id+" "+keyword); Process process = Runtime.getRuntime().exec(comArr); process.waitFor(); } public static void main(String[] args) throws Exception { new music().setVisible(true); } }
在这里小编讲明一点,代码中需要用到图片,所以读者最好在src文件夹下面新建一个images文件夹,然后在下面添加两张40*40像素的图片,图片命名分别为ss.jpg(播放图标)和sx.jpg(转变图标).如下:
另外,由于Java无法播放.mp3文件,所以小编在网上找了一些资料,终于有了一篇博客讲到了,博客链接为:利用JAVA SOUND播放mp3,flac,ape格式音乐,这篇博客讲到需要将几个.jar文件导入,小编用的IntelliJ IDEA,怎样导入呢?小编到网上找了一下,觉得这一篇博客不错,博客链接为:IntelliJ IDEA java项目导入jar包,打jar包
也许读者用的编辑器不同,希望到时候如果读者真的想实践一下,到网上找一下资料吧!5. 总结
这个音乐播放软件比起用python实现效果好多了,真的,希望到时候读者觉得这个还不错的话!点赞一下呗!小编在此谢了!
-
一个制作java小应用程序的全过程
2021-03-22 08:03:38一个制作java小应用程序的全过程一、安装java软件:从网上下载jdk-7u25-windows-i586.exe,安装到C:\ProgramFiles\Java\jdk1.7.0_25。二、设置环境变量:1、右键点击“我的电脑”,左键双击“属性”,选“高级”,...一个制作java小应用程序的全过程
一、安装java软件:
从网上下载jdk-7u25-windows-i586.exe,安装到C:\Program
Files\Java\jdk1.7.0_25。
二、设置环境变量:
1、右键点击“我的电脑”,左键双击“属性”,选“高级”,打开“环境变量”,在下面的“系统变量(S)”一栏里首先查看有没有 “JAVA_HOME ”、“PATH”和“CLASSPATH”变量名,如果没有,点“新建”,新建系统变量,如果有,点“编辑”,修改系统变量。注意,设置环境变量,以下三项都要在“系统变量(S)”一栏里设置,不要在“用户变量()”里设置。
2、下列三项,(=)等号前面的是变量名,(=)等号后面的是变量值。输入变量值时,只输入(=)等号后面的内容,最简便的办法是复制粘贴,其中的:.;%都是英文标点符号。另,在原有的系统变量里,如果发现有PATH这个变量名,只需要点击编辑,在原有变量的基础上添加英文状态下的分号,然后将类似“%JAVA_HOME%\bin;%PATH%”的路径名输入即可(切记不要删除原来的系统变量,只要有分号隔开,然后再添加。)
JAVA_HOME=C:\Program Files\Java\jdk1.7.0_25
PATH=%JAVA_HOME%\bin;%PATH%
CLASSPATH=.;%JAVA_HOME%\lib
3、检测软件安装和环境变量设置是否成功的方法:
运行,CMD,输入java -version,回车,弹出路径和版本,即为成功。
运行,CMD,输入java或javac或javadoc,回车,分别弹出有关信息,即为成功。
如果分别输入java
-version和java,回车后成功,而分别输入Javac和Javadoc后不成功,说明JAVA软件安装不是很成功,此时需要重新安装JAVA软件。一般来说,软件重装后,只要重新设置一下环境变量,再输入java
-version、java、Javac和Javadoc进行检测,一般都会成功,我试了几次都是这样。
三、制作.java格式的文本文件:
1、在F盘新建F:\test\jar文件夹。
2、在jar文件夹新建一个Hello.java文件,内容如下:
public class
Hello{
public
static void main(String[] args) {
System.out.println("Hello World!");
}
}四、在cmd用户图形界面里运行java命令。
打开cmd用户图形界面。进入cmd有两种方法,一是“开始”→ “运行”→ cmd;二是“开始”→ “附件/命令提示符”。进入以后,执行如下命令:
1、……>f:
2、F:\>cd
F:\test\jar
3、F:\test\jar>javac Hello.java
4、F:\test\jar>jar -cvf Hello.jar
Hello.class(后来发现,这一条可以省略。它与下一条都能生成class,不过这一条没有清单,而下一条添加了清单即MANIFEST.MF
。2015.10.29 21:18)
5、F:\test\jar>jar cvfm abc.jar MANIFEST.MF
Hello.class(第4步如果不省去,那么这一步就可以省略,但要在jar包里修改MANIFEST.MF文件,待修改后,即可返回第6步。)
6、F:\test\jar>jara -jar abc.jar(也可以直接输入F:\test\jar>jara
abc,这样更方便、快捷。)
7、F:\test\jar>_
注意:当我们进行到第3步时,如果输入javac
Hello.java后,说明软件安装不成功,需重装,一般来说,重装并重新设置环境变量后,再输入javac
Hello.java,基本都能正常运行。五、在jar包里修改MANIFEST.MF文件。
方法是:打开F:\test\jar,用鼠标右键点击Hello.jar,在弹出的右键下拉菜单里点击“用WinRAR打开”,在弹出的对话框中双击“META-INF”,在弹出的对话框中双击“MANIFEST.MF”,打开记事本,输入Main-class:
Hello
,回车,然后打开“文件”/“保存”,点“是”。不要到此为止。此时还应继续打开“文件”/“保存压缩文件副本为”,然后保存Hello.jar到桌面。至此,MANIFEST.MF的设置才算完成。
值得注意的是,当我们用鼠标右键点击Hello.jar、在弹出的右键下拉菜单里找不到“用WinRAR打开”这一选项,说明WinRAR还没有装入右键下拉菜单,需要重新安装WinRAR这个压缩软件。一般来说,重装WinRAR后,多重启几次机算机,右键菜单里就会增加“用WinRAR打开”这一选项。
还有一点也应注意,就是在我们用WinRAR打开Hello.jar,接着弹出的对话框中双击“MANIFEST.MF”,MANIFEST.MF却拒绝输入中英文字符,因此无法设置MANIFEST.MF。这是没有对MANIFEST.MF进行解压造成的。正确的作法是:首先对MANIFEST.MF进行解压,生成文件夹,然后用在打开方式里选择记事本,用记事本打开MANIFEST.MF文件,这样就将MANIFEST.MF这个无法打开的压缩文件就转换成了可编辑的记事本文件,然后就可以进行后续操作了。
六、打开Hello.jar包。
打开的方式有两种:
一是用cmd命令行打开,即:F:\test\jar>jara -jar abc.jar
或者F:\test\jar>jara abc。
二是用批处理文件打开,即:新建一个记事本文件,打开,输入两行命令:
java
-jar %1
pause
将其另存为“run.bat”,然后将其发到桌面。另将Hello.jar也发到桌面。使用时只要用鼠标将Hello.jar图标拖到run.bat图标的上面,松开鼠标后,再双击run.bat就可以了。
或者复制粘贴一个制作好的run.bat文件,右键打开,将java -jar %1中的“-jar
%1”删去,换上不带后缀.jar的文件名,然后另存为文件名。用时直接打开这个新建的批处理文件即可。
附:java在cmd里的实现过程:
▲Hello.java
▲MANIFEST.MF
▲abc.jar包
▲F:\test\jar
▲就这么简单?
-
怎样设置一个软件服务器地址
2021-08-11 08:19:05怎样设置一个软件服务器地址 内容精选换一换制作Docker镜像,有以下两种方法。快照方式制作镜像(偶尔制作的镜像):在基础镜像上,比如Ubuntu,先登录镜像系统并安装Docker软件,然后整体制作快照,即可得到所需软件...怎样设置一个软件服务器地址 内容精选
换一换
制作Docker镜像,有以下两种方法。快照方式制作镜像(偶尔制作的镜像):在基础镜像上,比如Ubuntu,先登录镜像系统并安装Docker软件,然后整体制作快照,即可得到所需软件的Docker镜像。Dockerfile方式制作镜像(经常更新的镜像):将软件安装的流程写成DockerFile,使用Docker build构建成Docker镜
Linux云服务器一般采用SSH连接方式,使用密钥对进行安全地无密码访问。但是SSH连接一般都是字符界面,有时我们需要使用图形界面进行一些复杂操作。本文以Ubuntu 18.04操作系统为例,介绍如何为云服务器安装VNC Server,以及如何使用VNC Viewer连接云服务器。已创建一台Ubuntu 18.04操作系统的云服务器,并且
怎样设置一个软件服务器地址 相关内容
本文主要介绍了在华为云上如何使用弹性云服务器的Linux实例手工部署GitLab。GitLab是一个开源的版本管理系统,使用Git作为代码管理工具。该指导具体操作以CentOS 7.2 64位操作系统为例。部署GitLab的实例内存要求不小于4GB。弹性云服务器所在安全组添加了如下表所示的安全组规则,具体步骤参见为安全组添加安全组规则。安
当后台重新配置邮箱服务器等信息后,手机端WeLink一定要退出重新登录一次。我们常用的邮箱,比如:QQ邮箱、163邮箱、腾讯企业邮箱、网易企业邮箱、263企业邮箱等常见邮箱,可以参考常见问题 > 客户端-邮件里的“常见的IMAP邮箱配置方法”,里面有详细的配置截图。如果是企业自己的邮箱,需要联系自家企业的IT管理员,确定自家企业邮箱的服务
怎样设置一个软件服务器地址 更多内容
VPC为弹性云服务器构建隔离的、用户自主配置和管理的虚拟网络环境,提升用户云中资源的安全性,简化用户的网络部署。使用弹性文件服务时,文件系统和云服务器归属于同一VPC下才能文件共享。VPC可以通过网络ACL进行访问控制。网络ACL是对一个或多个子网的访问控制策略系统,根据与子网关联的入站/出站规则,判断数据包是否被允许流入/流出关联子网。
登录云客服的管理台,选择“服务列表> 企业应用 > 云客服 CEC”。选择“呼叫中心实例管理”,单击需要管理的呼叫中心实例后的进入云客服。云客服首页展示如下。云客服首页云客服首页展示如下。选择 > 用户管理 > 员工。选中左侧的默认组织,单击右上角新建,进入新建员工页面。如下所示填写基本信息,单击保存进入下一步。填写时请关注:账号名称必须
介绍常见的安全组配置示例。如下示例中,出方向默认全通,仅介绍入方向规则配置方法。不同安全组内的云耀云服务器内网互通仅允许特定 IP 地址远程连接云耀云服务器SSH远程连接Linux云耀云服务器RDP远程连接Windows云服务器公网ping云耀云服务器云耀云服务器作Web服务器云耀云服务器作DNS服务器使用FTP上传或下载文件场景举例:在
简要介绍iRedMail是一个基于Linux/BSD系统的免费的、功能完备、成熟的邮件服务器解决方案,同时提供WebMail和Web管理界面,方便易用。一句话描述:邮件服务器开源协议:GPL 2.0建议的版本建议使用版本为iRedMail-0.9.9。云服务器要求本文以云服务器KC1实例测试,云服务器配置如表1所示。操作系统要求操作系统要
PHPWind(简称:PW)是一个基于PHP和MySQL的开源社区程序,是国内较受欢迎的论坛之一。轻架构,高效易开发,使用户可快速搭建并轻松管理。本文档指导用户使用华为云市场镜像“PHPWind 论坛社区系统(LAMP)”部署PHPWind论坛系统。弹性云服务器所在安全组添加了如表1所示的安全组规则,具体步骤参见为安全组添加安全组规则。M
介绍常见的安全组配置示例。如下示例中,出方向默认全通,仅介绍入方向规则配置方法。不同安全组内的弹性云服务器内网互通仅允许特定IP地址远程连接弹性云服务器SSH远程连接Linux弹性云服务器RDP远程连接Windows弹性云服务器公网ping ECS弹性云服务器弹性云服务器作Web服务器弹性云服务器作DNS服务器使用FTP上传或下载文件场景
修改系统时间后服务器网卡出现感叹号,无法连接网络。该文档适用于CentOS 7、EulerOS,并使用DHCP协议获取IP场景。DHCP租约通常默认为24小时,具体以实际场景为例。DHCP会话过程:DHCP典型会话过程包括:DHCP发现、DHCP提供、DHCP请求、DHCP确认,如图1所示DHCP发现(DISCOVER)客户在物理子网上发
Joomla是一套全球知名的内容管理系统,即Joomla CMS(Content Management System)。Joomla是使用PHP语言加上Mysql数据开发的软件系统,是网站的一个基础管理平台,适合从个人网站到各种企业网站、分类信息系统、电商销售类型的各类网站。本文档指导用户使用华为云市场镜像“Joomla 网站内容管理系统
您可以借助报表服务制作各种各样的报表,无论是简单的还是复杂的报表,同时系统提供订阅功能方便用户对报表进行订阅。本文主要介绍RDS使用SSRS(Reporting Services)报表服务。微软的Microsoft SQL Server产品中包含SQL Server数据库引擎、Reporting Services(SSRS)、Analys
本章节介绍如何使用弹性云服务器管理控制台上提供的远程登录(VNC方式)和如何使用密钥或密码方式(SSH方式)登录MRS集群中的节点,远程登录主要用于紧急运维场景,远程登录弹性云服务器进行相关维护操作。其他场景下,建议用户采用SSH方式登录。如果需要使用SSH方式登录集群节点,需要在集群的安全组规则中手动添加入方向规则:其中源地址为“客户端
介绍常见的安全组配置示例。如下示例中,出方向默认全通,仅介绍入方向规则配置方法。允许外部访问指定端口不同安全组内的实例内网互通仅允许特定IP地址远程连接实例SSH远程连接Linux实例公网ping实例实例作Web服务器实例作DNS服务器使用FTP上传或下载文件您需要提前准备好安全组,具体操作请参见创建安全组、配置安全组规则。常用端口介绍请
-
制作一个简易的即时聊天工具
2022-03-22 11:09:00实现简易的群聊天室 进入对应的文件夹 npm init -y (将会生一个package.json描述当前项目的基本信息) # 安装socket.io npm install --save socket.io 整理业务场景与实现思路: 实现群聊。 当打开群聊页面时,建立... -
制作一个完整的网页的步骤
2021-06-28 14:06:11怎样制作个人网页如果你已经上网,为何不尝试一下在网上做一个完全属于自己的主页?有了自己的主页,全世界的人都可以随时找到你,你也可以向全世界宣传下自己,是非常有意义和有意思的。现在简单介绍一下制作主页的... -
制作一个古诗词的网页
2021-06-11 06:20:04如何制作一个属于自己的网页做一个网站,需要注册域名、空间、制作网页。不管制作什么样的网站,有二个必须的工作,一是注册域名,二是租用虚拟主机空间. 首先是注册域名。域名注册.com(国际域名)和.cn(国内域名)为... -
江苏招标文件制作软件 v1.0 绿色免费版.zip
2019-07-13 04:23:20新建参照——新建一个参照招标文件 打开――用于打开已经保存的招标文件 保存――保存您所建立的当前招标文件,建议在编制过程中定时保存 另存为――更改当前招标文件保存路径,方便用户查找 关闭――关闭您正在... -
怎么做一个文件/软件管理服务器
2022-04-13 12:00:16例如一些软件的安装包(tar.gz zip rpm Centos镜像),对这些文件按版本进行整理,可以做一个类似镜像网站 首先最低满足以下需求: <1>要对日常或工作中需要的软件的安装包的存放位置,上传下载方式进行统一,... -
电脑相册制作软件免费版,windows自带安全又免费相册制作软件
2021-07-09 07:15:35很多朋友想在电脑上把自己拍的一些视频和照片做成相册或者是相册视频,那么,就会找电脑相册制作软件免费版,实际上,网络上很多稍微好用的相册制作软件基本都是收费的,免费相册制作软件一般都会功能上有所限制、... -
漫画C语言 做个聊天软件你不懂也得懂
2021-12-02 12:58:49漫画C语言讲解实现socket聊天软件制作。 -
制作app软件具体要多少钱?(整合篇)
2019-06-07 10:41:15在移动互联网时代,很多企业以及创业者想自己开发一款属于自己公司的APP软件,所以经常有人会问我制作app软件要多少钱?笔者今天整理了对该问题回答得比较精辟的答案,仅供参考! 回答1: 我是开发人员,也做过一... -
1小时学会不打代码制作一个网页精美简历(1)
2021-05-13 22:39:48## 作者简介 ...15-16年曾在网上直播,带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息,迷茫的你会找到答案。系列教程将会在流量降低时转为付费位置,流量多时将不会,各位抓紧时间学习哟~ -
Live2d( 动画制作软件 )中文版分享
2020-12-23 22:19:40原标题:Live2d( 动画制作软件 )中文版分享Live2d是一款专业强大的动画制作软件,通过它不仅可以轻松的创建绘画想要的图像,还能帮助用户制作出各种样式的人物建模作品,并还能通过其中的功能直接将原始图片或静态的... -
用python做一个翻译软件。
2021-08-25 10:39:57那都是离不开翻译软件的于是乎,我想自己用python做一个翻译软件, 花了一个小时,终于做了出来了,各种语言随便翻 一、需要的库 translate: 谷歌翻译的第三方包,可以实现多种语言之间的相互翻译。 tkinter: ... -
凝望时光照片书制作软件V5.1中文安装免费版
2019-07-25 03:53:54凝望时光照片书制作软件是一款可以个性设计自已照片书,画册,相册,纪念册,台历,挂历,LOME卡等带有图片的书籍的制作软件,有近400多个精品模板,这是一款免费相册制作软件。这款相册制作软件界面简洁,操作简单... -
超详细的软件安装包制作打包流程(C/S客户端)
2021-02-02 08:36:07C/S客户端开发完成,需要将程序交付给用户,直接压缩发给用户是可以的(只是有点不专业),如果能有一个比较好看的安装界面,那档次就不一样了。 本文介绍怎么使用Adanced Installer 17.9 制作专业的Windows 客户端... -
制作一个“生日快乐”App,来自程序员的生日礼物~
2022-01-07 01:06:53点击上方“码农的后花园”,选择“星标”公众号精选文章,第一时间送达之前给大家制作了一个来自程序员的表白神器,本期带大家做一个“生日快乐”App”,来自程序员的生日礼物,不要再说程序员不懂... -
自己制作一个计时器、倒计时器
2020-11-30 10:12:00时间的观念在现在的时代越来越重要,考试要定时完成,炒菜做饭要计时完成,甚至连煮包泡面都要计时才能更加美味。制作计时器对我们越来越重要。 本程序的编写环境是VC++6.0,目前此程序实现了...每次只能执行一个功能。 -
如何从0开始在鸿蒙OS中制作一个APP!
2020-12-11 13:11:00点击“开发者技术前线”,选择“星标????”让一部分开发者看到未来作者:若离链接:https://www.zhihu.com/question/420404904/answer/1465... -
app软件怎么开发 盘点3种app制作方式
2021-04-06 09:41:01现在智能手机给大家的生活带来了很多便利,...但是,app开发需要的技术人才多,至少需要专业iOS开发师、Android开发师、UI设计师、产品经理、后台开发师,如果项目比较大,还需要测试人员,如果涉及到网站,还需要一名 -
PySimpleGUI图形界面绘制及办公自动化小软件的制作
2021-02-09 22:56:11原博地址知识梳理不易,...1 PySimpleGUI安装在命令行/终端输入:pip install pysimplegui,等待安装完成后,进入python环境,输入import PySimpleGUI回车无误后,确认安装成功 2 PySimpleGUI制作简易弹窗界面2.1 两... -
给软件制作加密狗
2019-09-20 05:17:52使用加密狗进行程序的加密...国内比较老牌的加密锁公司是深思,深思的锁从精锐4,到现在的精锐5,都是比较不错的产品,加密安全性高,使用体验好,性价比高,比较推荐这一款。 如何用加密狗加密程序流程: 1、 获... -
网页制作常用软件
2013-12-03 11:47:06网页制作常用软件介绍,需要做网站的朋友有福了。 -
电脑屏保软件如何制作屏保 及如何设置屏幕保护
2021-07-27 07:52:01笔者收集有一些经典的动态屏保,比如时钟屏保、泡泡屏保、...闲暇的时候尝试着为自己的桌面制作一个屏保吧。》》用照片制作MV、制作3D电影、如何制作电子相册...这个电脑屏保制作软件,不需要任何特别技巧,很简单... -
EXCEL制作的CUSUM控制图软件
2012-02-24 11:23:05CUSUM控制图软件是免费质量管理软件,基于微软的EXCEL编制,只需要依据软件提示,按START键...软件操作非常简单,界面美观漂亮,是一个不错的质量管理软件工具. 本资源来自于spconline点com点cn网站,用户可以去那直接下载. -
整人软件制作
2013-08-16 15:53:18整人的软件易语言制作 自己看咯 -
怎样做一个软件注册程序
2016-11-05 22:11:28我以前做过一个单机版的注册是这样的,运行...那个key其实就是取用户的网卡地址+计算机名+时间+加一个特征字符串,然后md5哈希出来的一个字符串。然后发送给我,我在加上一些特征字符串再哈希一次就成为注册码,当我 -
如何设计一个应用软件
2009-10-03 23:00:00如何设计一个应用软件当今时代软件行业各种新的技术层出不穷。但是我认为软件行业最根本的技术在于以下几个内容:1、操作系统。2、编译系统。3、数据库管理系统。4、协议。5、算法。6、应用软件。这六种技术构成了...