JAVA 如何在窗体中显示输出结果

package keylogger;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
//创建窗口
public class readFile extends JFrame{
JPanel JPanel1;

JLabel reading;

public readFile(){

this.setSize(300,200);  

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

this.setTitle("Keylogger!");  

this.setVisible(true);

JPanel1 = new JPanel();

add(JPanel1);

reading = new JLabel();//感觉应该在这里添加输入的内容,但是不知道怎么调用下面读取的内容

JPanel1.add(reading);

}
//读取TXT文件
public static void readFileMessage(String fileName) {

File file = new File(fileName);

BufferedReader reader = null;

try {

    System.out.println("按顺序读取文件的内容如下:");

    reader = new BufferedReader(new FileReader(file));


    String string = null;

    int line = 1;
    // 按行读取内容,直到读入null则表示读取文件结束
    while ((string = reader.readLine()) != null) {

        System.out.println("line " + line + ": " + string);

        line++;
    }

    reader.close();

} 
        catch (IOException e) {

    e.printStackTrace();

} finally {

    if (reader != null) {

        try {
            reader.close();

        } catch (IOException e1) {

        }
    }
}

}

//输出结果
public static void main(String[] args) {

String fileName = "D:/temp/test.txt";

System.out.println("输出文件的内容:");

readFile.readFileMessage(fileName);

        readFile r = new readFile();

}
}
这是一个读取TXT文件的程序,我想把读取的内容显示在窗体中,但是不知道该如何编写,
希望各位大神能给我一些帮助,感激不尽!!

5个回答

有没有具体一点的。。。

你从txt文件中读出来的内容不是放到string中去了吗?

JLable是用来显示标签的,那你得给它个文本才能显示吧。。
调用reading.setText(string)方法,这不就行了?

sinat_36930749
sinat_36930749 回复小神宝宝: 我还没解决呢。。。。
大约 3 年之前 回复
sinat_35134348
传说中的神话灬 我只是来看看楼主给你C币没,结果没有,不想回答了
大约 3 年之前 回复
sinat_36930749
sinat_36930749 就是在纠结该在JLabel哪里写些什么好。。我再试试。。感谢
大约 3 年之前 回复

用setText("输出内容")方法和getText()方法。只能帮你到这了。

 直接用J Text Area,将读取内容append这个组件上去就可以了,在构造函数中读取并显示。有问题私信联系。
sinat_36930749
sinat_36930749 我反应过来啦。。。其实我是不知道怎么在append那里调用下面的string。。。TAT
大约 3 年之前 回复
sinat_36930749
sinat_36930749 这学期刚接触JAVA。。。说的太专业我看不明白。。
大约 3 年之前 回复

既然会用bufferedreader,那就用bufferwriter就好了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
JAVA如何在窗体中输出
package keylogger; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; //创建窗口 public class readFile extends JFrame{ JPanel JPanel1; JLabel reading; public readFile(){ this.setSize(300,200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setTitle("Keylogger!"); this.setVisible(true); JPanel1 = new JPanel(); add(JPanel1); reading = new JLabel();//感觉应该在这里添加输入的内容,但是不知道怎么调用下面读取的内容 JPanel1.add(reading); } //读取TXT文件 public static void readFileMessage(String fileName) { File file = new File(fileName); BufferedReader reader = null; try { System.out.println("按顺序读取文件的内容如下:"); reader = new BufferedReader(new FileReader(file)); String string = null; int line = 1; // 按行读取内容,直到读入null则表示读取文件结束 while ((string = reader.readLine()) != null) { System.out.println("line " + line + ": " + string); line++; } reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) { } } } } //输出结果 public static void main(String[] args) { String fileName = "D:/temp/test.txt"; System.out.println("输出文件的内容:"); readFile.readFileMessage(fileName); readFile r = new readFile(); } } 这是一个读取TXT文件的程序,我想把读取的内容显示在窗体中,但是不知道该如何编写, 希望各位大神能给我一些帮助,感激不尽!!!
JAVA中append不显示输出的内容是怎么回事
package hh; import javafx.scene.chart.PieChart.Data; import javax.swing.*; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Label; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.net.URLEncoder; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import com.sun.corba.se.spi.orbutil.fsm.Guard.Result; import ee.WeatherInf; import ee.util; import java.awt.*; //窗体颜色 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.URLEncoder; import java.util.*; public class window extends JFrame implements ActionListener{ JButton butok; JPanel panel1; TextField text1; JTextArea prince=new JTextArea(15, 30); public window() { setTitle("无敌天气预报"); //窗体标题 setLocation(250,250); //窗体位置 setSize(500,300); //窗体大小 panel1 =new JPanel(); //添加一个panel对象,方便布局 butok= new JButton("查询"); butok.addActionListener(this); text1=new TextField("输入要查询的城市:",20); panel1.add(text1); panel1.add(butok); add(panel1,BorderLayout.NORTH); add(new JScrollPane(prince),BorderLayout.CENTER); } public void actionPerformed(ActionEvent arg0) { // TODO 自动生成的方法存根 String str=text1.getText(); //将传入城市名的getNet接口类作为参数初始化线程类 getNet city=new getNet(str); Thread thread=new Thread(city); //线程开始 thread.start();// try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } prince.append(city.result); } public static void main(String[] args) { new window(); } } class getNet implements Runnable{ WeatherInf wInf; String city; String result; public getNet(String city){ this.city=city; } public void run() { try { //url串 String url="http://api.map.baidu.com/telematics/v3/weather?location="+URLEncoder.encode(city,"utf-8")+"&output=json&ak=YknGmxIoPugT7YrNrG955YLS"; //调用工具类的方法获取json数据 String content=util.getJsonString(url); //调用工具类的方法解释json数据 wInf=util.resolveWeatherInf(content); //将解释好的日期 城市 天气 温度 PM2.5 穿衣指数选出放入result String result=wInf.getWeatherdate() +" "+wInf.getLocation()+" "+wInf.getWeatherInfs()[0].getWeather()+" "+wInf.getWeatherInfs()[0].getTempertureOfDay() +" PM2.5指数 "+wInf.getPmTwoPointFive() +" 穿衣指数:"+wInf.getDressAdvise(); System.out.print(result); System.out.println(); } catch (Exception e) { System.out.println("查不到此地区天气!"); } } public void actionPerformed(ActionEvent e) { // TODO 自动生成的方法存根 } public static void main(String agrs[]) { window win= new window(); //初始化窗体 win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体关闭按钮 win.setVisible(true); //使窗体可见 } } 我编写了一个,点击按钮就能查询当地天气的程序,然后我单击按钮之后,天气的详情并不显示在append上的文本框,怎么办?
java同步方法对窗体的功能设计是否有影响?(找了半天实在没办法了求助)
在窗体内定义了一个进度条,第一个同步方法的作用是如果进度条为0则将其设为100,另一个同步方法的作用是将进度每减1则sleep(100),到0是则wait(),这样做后有时候运行没问题,但大多数时候是窗体内进度条不显示,eclipse下的输出框显示正常的运行方式。各位大大求解啊。
Java frame中调用了setContentPane(new Panel());方法,但不显示Panel
代码如下: **PanelGame类:** package ui; import java.awt.Graphics; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JPanel; public class PanelGame extends JPanel{ //创建一个对象数组,存储各个边框 private Lay[] lays=null; //TODO 【硬编码】是非常不好的开发习惯 //TODO 尽量将数字货字符串定义为常量,或写入配置文件 public PanelGame() { this.setVisible(true); lays = new Lay[]{ new LayDataBase(40,32,334,279), new LayDisk(40,343,334,279), new LayGame(414,32,334,590), new LayButton(788,32,334,124), new LayNext(788,188,176,148), new LayLevel(964,188,158,148), new LayPoint(788,368,334,200) }; } public void pointComponent(Graphics g){ //test g.fillRect(32, 32, 32, 32); //循环刷新游戏画面 for(int i=0;i<lays.length;i++){ //刷新每一个边框 lays[i].paint(g); } } } FrameGame类: package ui; import java.awt.Dimension; import java.awt.Image; import java.awt.Toolkit; import javax.swing.ImageIcon; import javax.swing.JFrame; public class FrameGame extends JFrame{ public FrameGame() { //设置标题 this.setTitle("Tetris by 柴源"); //设置窗口关闭 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗口大小 this.setSize(1200, 700); //设置 不允许用户改变窗口大小 this.setResizable(false); //设置窗口位置 Toolkit toolkit = Toolkit.getDefaultToolkit(); Dimension screen = toolkit.getScreenSize(); int x = (screen.width-this.getWidth())/2; int y = (screen.height-this.getHeight())/2-32; //此处用-32,因为Y轴正方向向下 this.setLocation(x,y); //设置默认Panel this.setContentPane(new PanelGame()); } } **Lay类(抽象类):** package ui; import java.awt.Graphics; import java.awt.Image; import javax.swing.ImageIcon; /* * 抽象类LAY,用于实现各个子窗体的绘制, * */ public abstract class Lay { //定义几个静态变量,供绘制方法createWindow使用 private static final int SIZE=7; private static Image WINDOW_IMG=new ImageIcon("graphics/window/Window.png").getImage(); private static int WINDOW_W=WINDOW_IMG.getWidth(null); private static int WINDOW_H=WINDOW_IMG.getHeight(null); //定义属性,窗口左上角坐标(x,y)以及窗口宽W高H private int x; private int y; private int w; private int h; //构造器,赋予窗体左上角位置(X,Y) 以及宽W高H public Lay(int x,int y, int w, int h) { // TODO Auto-generated constructor stub this.x=x; this.y=y; this.w=w; this.h=h; } //绘制窗口方法 绘制的方法必须有Graphics g参数,类似画笔 public void createWindow(Graphics g){ //原函数:g.drawImage(img,x1,y1,x2,y2,x3,y3,x4,y4,observer); //左上角 g.drawImage(WINDOW_IMG, x, y,x+SIZE,y+SIZE, 0, 0, SIZE, SIZE, null); //右上角 g.drawImage(WINDOW_IMG, x+w-SIZE, y,x+w,y+SIZE, WINDOW_W-SIZE, 0, WINDOW_W, SIZE, null); //左下角 g.drawImage(WINDOW_IMG, x, y+h-SIZE,x+SIZE,y+h, 0, WINDOW_H-SIZE, SIZE, WINDOW_H, null); //右下角 g.drawImage(WINDOW_IMG, x+w-SIZE, y+h-SIZE,x+w,y+h, WINDOW_W-SIZE, WINDOW_H-SIZE, WINDOW_W, WINDOW_H, null); //上边 g.drawImage(WINDOW_IMG, x+SIZE, y, x+w-SIZE, y, SIZE,0, WINDOW_W-SIZE, 0, null); //下边 g.drawImage(WINDOW_IMG, x+SIZE, y+h, x+w-SIZE, y+h, SIZE,WINDOW_H, WINDOW_W-SIZE, WINDOW_H, null); //左边 g.drawImage(WINDOW_IMG, x, y+SIZE, x, y+h-SIZE, 0,SIZE, 0, WINDOW_H-SIZE, null); //右边 g.drawImage(WINDOW_IMG, x+w, y+SIZE, x+w, y+h-SIZE, WINDOW_W , SIZE , WINDOW_W ,WINDOW_H-SIZE, null); } abstract public void paint(Graphics g); } 实现Lay类的子类代码我就不贴了... 问题主要在于: 已经在FrameGame类里头用了this.setContentPane(new PanelGame()); 希望通过PanelGame里输出了一些图片(通过创建Lay对象输出图片) 但是Run以后,貌似连Panel都不显示...图片路径检查了应该没问题。 求指点,谢了!
编写一个java窗口程序所涉及到的知识点,在下没什么头绪,不需要代码,只要知识点
1. 能在窗体中选择、显示、输出Excel数据文件 2. 能够按关键字合并两个文件 3. 能够按文件中的属性查询文件 4. 能够修改、插入、删除文件中的记录 5. 能够按属性对文件进行排序 6. 能够计算数值型属性进行计算总和、平均并写入某个属性中。
调用jlin程序 C# Process调用程序 重定向输出没反应
用C#调用java ,命令行参数填写的是-jar "BC.jar" 打开C#程序以后,jar被成功启动,也有了输出 但是在输入处一直有一个>符号,导致我输入命令到java程序以后,重定向的输出没了反应 我的程序代码为: ``` static void Main(string[] args) { Process p = new Process(); p.StartInfo.FileName = "java"; //要执行的程序名称 p.StartInfo.UseShellExecute = false; //不使用WindowsShell p.StartInfo.RedirectStandardInput = true; //可能接受来自调用程序的输入信息 p.StartInfo.RedirectStandardOutput = true; //由调用程序获取输出信息 p.StartInfo.RedirectStandardError = true; //错误输出重定向 p.StartInfo.CreateNoWindow = false; //不显示程序窗口 p.StartInfo.Arguments = "-jar BC.jar"; p.StartInfo.WorkingDirectory = @"C:\Users\姬逍遥\Desktop\BC"; p.Start(); Task T = new Task(new Action(() => { while (!p.HasExited) { Console.Write(new char[] { (char)p.StandardOutput.Read() }); } })); T.Start(); while (!p.HasExited) { List<char> a = new List<char>(); char Last = ' '; while (Last != '\r') { a.Add((char)Console.Read()); Last = a.Last(); } p.StandardInput.Write(a.ToArray()); } } ``` Java代码: ![图片说明](https://img-ask.csdn.net/upload/201712/24/1514104790_498172.png) 最后运行C#程序输入命令: ![图片说明](https://img-ask.csdn.net/upload/201712/24/1514104828_36747.png) 发现卡在了读取那一步,代表直接没输出了: ![图片说明](https://img-ask.csdn.net/upload/201712/24/1514104880_106623.png) 该java程序在cmd下运行是这样子的: ![图片说明](https://img-ask.csdn.net/upload/201712/24/1514105106_691480.png) 这是那个jar:https://yivesmirror.com/files/bungeecord/BungeeCord-1287.jar 是一个MineCraft服务端核心,可能是jline输出,请问c#如何在不更改目标程序任何代码情况下解决此问题,不要谈什么winAPI读写dos窗体,太笨重。
JAVA通讯录 TXT文档分页问题
我在做一个JAVA通讯录,想请问一下如何把这个TXT文档 超过20行分页显示,请前辈们多多指教,谢谢 方便的话请帮我写一下代码看看行吗 package MyAddBook; import java.awt.Choice;//选择 import java.awt.Container;//容器 import java.awt.Frame; import java.awt.GridLayout;//间距 import java.awt.Toolkit;//居中 import java.awt.event.ActionEvent;//事件 import java.awt.event.ActionListener;//监听 import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter;//文本输出流打印对象的格式化 import java.text.Collator;//区分语言 import java.util.Arrays; import java.util.Comparator;//排序 import java.util.Scanner; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JOptionPane;//消息提示框 import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class MyAddBook { public static JFrame frame; public MyAddBook() { frame=new JFrame("通讯录");//面板标题 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//单击关闭按钮关闭窗口 frame.setVisible(true);//窗口可见 /* * 在一个窗口中,我们经常需要给窗口添加菜单条。在 Java * 中这一部分是由三个类实现的,它们是JMenuBar、JMenu和JMenuItem, 分别对应菜单条、菜单和菜单项。 * 同时,可以给JMenuItem注册侦听器,但不能对JMenuBar,JMenu注册侦听器. * * 一、菜单条(JMenuBar) * JMenuBar 的构造方法是 JMenuBar(),相当简单。在构造之后,还要将它设置成窗口的菜单条,这里要用 setJMenuBar * 方法: JMenuBar TestJMenuBar=new JMenuBar(); * TestFrame.setJMenuBar(TestJMenuBar); 需要说明的是,JMenuBar 类根据 JMenu * 添加的顺序从左到右显示,并建立整数索引。 * * 二、菜单(JMenu) 在添加完菜单条后,并不会显示任何菜单,所以还需要在菜单条中添加菜单。菜单 * JMenu 类的构造方法有4种: JMenu() 构造一个空菜单。 JMenu(Action a) * 构造一个菜单,菜单属性由相应的动作来提供。 JMenu(String s) 用给定的标志构造一个菜单。 JMenu(String * s,Boolean b) 用给定的标志构造一个菜单。如果布尔值为false,那么当释放鼠标按钮后,菜单项会消失;如果布尔值为true, * 那么当释放鼠标按钮后,菜单项仍将显示。这时的菜单称为 tearOff 菜单。 在构造完后,使用 JMenuBar 类的 add * 方法添加到菜单条中。 * * 三、菜单项(JmenuItem) 接下来的工作是往菜单中添加内容。 * 在菜单中可以添加不同的内容,可以是菜单项(JMenuItem),可以是一个子菜单,也可以是分隔符。 在构造完后,使用 JMenu 类的 * add 方法添加到菜单中。 子菜单的添加是直接将一个子菜单添加到母菜单中,而分隔符的添加只需要将分隔符作为菜单项添加到菜单中。 */ JMenuBar bar=new JMenuBar(); JMenu edit=new JMenu("编辑"); JMenuItem edit1=new JMenuItem("录入"); JMenuItem edit2=new JMenuItem("查询"); JMenuItem edit3=new JMenuItem("删除"); JMenuItem edit4=new JMenuItem("修改"); JMenuItem edit5=new JMenuItem("排序"); edit1.addActionListener(new Type());//监听 JMenu show=new JMenu("按性别显示"); JMenuItem show1=new JMenuItem("男"); JMenuItem show2=new JMenuItem("女"); Container c=frame.getContentPane(); JPanel p=new JPanel(); c.add(p); p.add(bar); bar.add(edit); bar.add(show); edit.add(edit1); edit.add(edit2); edit.add(edit3); edit.add(edit4); edit.add(edit5); show.add(show1); show.add(show2); // 获取你的屏幕的宽和高 int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height = Toolkit.getDefaultToolkit().getScreenSize().height; // 然后设置你编写的窗口的初始位置,也就是在中间, frame.setLocation(width / 2 - 200, height / 2 - 150); frame.setSize(500, 300); /* * 1. JFrame是javax.swing.JFrame的类,Frame是Java.awt.Frame的类 * * 2. 关闭窗口的方式不同: * 2.1 JFrame的关闭方式:传递参数使得关闭按钮有效 * Frame的关闭方式:加监听使得关闭按钮有效 */ edit2.addActionListener(new ActionListener() // 监听查询 { public void actionPerformed(ActionEvent e) { new Operation("查询", 2).dialog.setVisible(true); } }); edit3.addActionListener(new ActionListener() // 监听删除 { public void actionPerformed(ActionEvent e) { //获取你的屏幕的宽和高 int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height = Toolkit.getDefaultToolkit().getScreenSize().height; //然后设置你编写的窗口的初始位置,也就是在中间, frame.setLocation(width / 2 - 200, height / 2 - 150); new Operation("删除", 3).dialog.setVisible(true); } }); edit4.addActionListener(new ActionListener() // 监听修改 { public void actionPerformed(ActionEvent e) { new Operation("修改", 4).dialog.setVisible(true); } }); // 输出类 edit5.addActionListener(new ActionListener() // 监听排序 { public void actionPerformed(ActionEvent e) { new Print("按姓名排序后", 2);//调用 排序 函数 } }); show1.addActionListener(new ActionListener() // 监听男 { public void actionPerformed(ActionEvent e) { new Print("男", 1);//调用 匹配 显示 } }); show2.addActionListener(new ActionListener() // 监听女 { public void actionPerformed(ActionEvent e) { new Print("女", 1);//调用 匹配 显示 } }); } public static void main(String[] args) { new MyAddBook(); } public String[] getSortOfChinese(String[] a) { // Collator 类是用来执行区分语言环境,这里使用CHINA Comparator cmp = Collator.getInstance(java.util.Locale.CHINA); // JDKz自带对数组进行排序。 Arrays.sort(a, cmp); return a; } } class Operation{ private Frame frame; /* * public JDialog(Dialog owner, String title, boolean modal) * 创建一个具有指定标题、模式和指定所有者 Dialog 的对话框。 此构造方法将该组件的语言环境属性设置为 * JComponent.getDefaultLocale 所返回的值。 * * 参数: owner - 显示该对话框的所有者 Dialog; 如果此对话框没有所有者,则为 null * title -该对话框的标题栏中所显示的 String * modal - 指定对话框在显示时是否阻塞用户向其他顶层窗口输入。如果为true,则模式类型属性被设置为 DEFAULT_MODALITY_TYPE; * 否则对话框是无模式的。 * 抛出: * HeadlessException - 如果 GraphicsEnvironment.isHeadless() 返回 true。 */ JDialog dialog = new JDialog(frame, "查询对话框", true); public Operation(String str, int n) { dialog.setSize(450, 300); //获取你的屏幕的宽和高 int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height = Toolkit.getDefaultToolkit().getScreenSize().height; //然后设置你编写的窗口的初始位置,也就是在中间, dialog.setLocation(width / 2 - 200, height / 2 - 150); Container c = dialog.getContentPane(); /*GridLayout(int rows, int cols, int hgap, int vgap) : 创建具有指定行数、列数以及组件水平、纵向一定间距的网格布局。*/ dialog.setLayout(new GridLayout(2, 1, 5, 5)); JLabel LOperation = new JLabel("请输入要" + str + "人员的名字"); final JTextField Tname = new JTextField(10);//单行文本输入框 JButton sure = new JButton("确定"); JButton cancel = new JButton("取消"); JPanel pane1 = new JPanel(); JPanel pane2 = new JPanel(); c.add(pane1); c.add(pane2); pane1.add(LOperation); pane1.add(Tname); pane2.add(sure); pane2.add(cancel); dialog.setDefaultCloseOperation(dialog.DISPOSE_ON_CLOSE); if (n == 2) { sure.addActionListener(new ActionListener() // 查询 { public void actionPerformed(ActionEvent e) { try { FileReader file = new FileReader("D:\\AddressBook.txt"); Scanner find = new Scanner(file); /* * 这里while括号里面的find.hasNext()方法用于判断find对象中有没有下一条数据 * 返回 bool 值 , 有则返回true 无 则返回false * 下面的find.next()是获取find对象中的值 然后赋值给 str 然后输出这个方法 * 其实就是循环输出it 对象中所有的值 */ while (find.hasNext()) { if (find.next().equals(Tname.getText())) { dialog.dispose();//关闭窗体,并释放一部分资源。 Type fd = new Type(); fd.frame = new JFrame("查询结果如下"); fd.Tname.setText(Tname.getText()); fd.Csex.select(find.next()); fd.Tunit.setText(find.next()); fd.Thomephone.setText(find.next()); fd.Temail.setText(find.next()); fd.Ttelephone.setText(find.next()); fd.Type(); } } file.close(); find.close(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block // e1.printStackTrace(); System.out.print("未找到文件"); } catch (IOException e2) { // TODO Auto-generated catch block // e2.printStackTrace(); System.out.print("未找到该人员"); } } }); } if (n == 3) { sure.addActionListener(new ActionListener() // 删除 { public void actionPerformed(ActionEvent e) { try { File file = new File("D:\\AddressBook.txt");//创建文件 Scanner find = new Scanner(file);//输入 FileWriter file1 = new FileWriter("D:\\AddressBook1.txt", true); PrintWriter write = new PrintWriter(file1); while (find.hasNext()) {//取下一个元素 String s = find.next(); if (!(s.equals(Tname.getText()))) { write.print(s + "\t"); write.print(find.next() + "\t"); write.print(find.next() + "\t\t"); write.print(find.next() + "\t\t"); write.print(find.next() + "\t\t"); write.println(find.next()); } else { find.next(); find.next(); find.next(); find.next(); find.next(); } } // file.close(); find.close(); file.delete(); write.close(); file1.close(); File file2 = new File("D:\\AddressBook1.txt"); file2.renameTo(new File("D:\\AddressBook.txt")); JOptionPane.showMessageDialog(null, "删除成功", "删 除 结 果", JOptionPane.INFORMATION_MESSAGE); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block // e1.printStackTrace(); JOptionPane.showMessageDialog(null, "未找到文件"); } catch (IOException e2) { // TODO Auto-generated catch block // e2.printStackTrace(); System.out.print("未找到该人员"); } } }); } if (n == 4) { sure.addActionListener(new ActionListener() // 修改 { public void actionPerformed(ActionEvent e) { try { File file = new File("D:\\AddressBook.txt"); Scanner find = new Scanner(file); FileWriter file1 = new FileWriter("D:\\AddressBook1.txt", true); PrintWriter write = new PrintWriter(file1); while (find.hasNext()) { String s = find.next(); if (!(s.equals(Tname.getText()))) { write.print(s + "\t"); write.print(find.next() + "\t"); write.print(find.next() + "\t\t"); write.print(find.next() + "\t\t"); write.print(find.next() + "\t\t"); write.println(find.next()); } else { dialog.dispose(); Type fd = new Type(); Type.y = 1; fd.frame = new JFrame("查询结果如下"); fd.Tname.setText(Tname.getText()); String s1 = find.next(); fd.Csex.select(s1); String s2 = find.next(); fd.Tunit.setText(s2); String s5 = find.next(); fd.Thomephone.setText(s5); String s6 = find.next(); fd.Temail.setText(s6); String s7 = find.next(); fd.Ttelephone.setText(s7); fd.Type(); if (Type.z == 1) { write.print(Tname.getText() + "\t"); write.print(s1 + "\t"); write.print(s2 + "\t\t"); write.print(s5 + "\t\t"); write.print(s6 + "\t\t"); write.println(s7); Type.z = 2; } } } // file.close(); find.close(); file.delete(); write.close(); file1.close(); File file2 = new File("D:\\AddressBook1.txt"); file2.renameTo(new File("D:\\AddressBook.txt")); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block // e1.printStackTrace(); System.out.print("未找到文件"); } catch (IOException e2) { // TODO Auto-generated catch block // e2.printStackTrace(); System.out.print("未找到该人员"); } } }); } cancel.addActionListener(new ActionListener() // 取消 { public void actionPerformed(ActionEvent e) { dialog.dispose();//关闭查询面板 } }); } } class Print{ public JTextArea area;// 多行文本输入框 public Print(String st, int n) { JFrame frame = new JFrame(st + "信息如下"); area = new JTextArea();// 多行文本输入框 frame.add(area); frame.setVisible(true); frame.setSize(1000, 500); frame.setLocation(350, 150);// 显示位置坐标 if (n == 2) try // 排序 { int i, j, k; String[] all; all = new String[1000]; BufferedReader read = new BufferedReader(new FileReader("D:\\AddressBook.txt")); area.append("姓 名" + "\t" + "性别" + "\t" + "单位" + "\t\t" + "住宅电话" + "\t\t" + "Email" + "\t\t\t" + "移动电话" + '\n'); int z = 1, count = 0; while (z == 1) { for (i = 0; i < 1000; i++) { String str = read.readLine(); if (str != null) { all[i] = str; count++; } else z = 0; } } String[] bll; bll = new String[count]; for (i = 0; i < count; i++) bll[i] = all[i]; getSortOfChinese(bll);// 调用排序函数 for (i = 0; i < count; i++) area.append(bll[i] + '\n');// 在指定元素的结尾追加内容 read.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e2) { e2.printStackTrace(); } if (n == 1) try // 指定类人员 { FileReader file = new FileReader("D:\\AddressBook.txt"); Scanner find = new Scanner(file); area.append("姓 名" + "\t" + "性别" + "\t" + "单位" + "\t\t" + "住宅电话" + "\t\t" + "Email" + "\t\t\t" + "移动电话" + '\n'); while (find.hasNext()) { String str1 = find.next(); String str2 = find.next(); if (str2.equals(st)) { area.append(str1 + "\t"); area.append(str2 + "\t"); area.append(find.next() + "\t\t"); area.append(find.next() + "\t\t"); area.append(find.next() + "\t\t"); area.append(find.next() + '\n'); } else { find.next(); find.next(); find.next(); find.next(); } } file.close(); find.close(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e2) { e2.printStackTrace(); } } private void getSortOfChinese(String[] bll) { // TODO Auto-generated method stub } } class Type implements ActionListener { public static int z = 2; public static int y = 0; public JLabel Lname, Lsex, Lunit, Lhomephone, Lemail, Ltelephone, Lnote;//添加标签 public JTextField Tname = new JTextField(15), Thomephone = new JTextField(25), Temail = new JTextField(25),Ttelephone = new JTextField(25), Tunit = new JTextField(25); public Choice Csex = new Choice();//创建文本框 public JButton sure, cancel;//添加“确定”“取消”按钮 public JFrame frame = new JFrame("录入联系人信息");//面板标题 public Type() { Csex.addItem("男");//给列表框或组合框等具有列表的对象添加项目 Csex.addItem("女"); } public void Type() { Container c = frame.getContentPane();//创建容器 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//单击窗口的关闭按钮时程序执行的操作 frame.setSize(800, 400);//窗口大小 frame.setLayout(new GridLayout(7, 2, 7, 7));//设置用户界面上的屏幕组件的格式布局 frame.setVisible(true);//设置面板可见 //获取你的屏幕的宽和高 int width = Toolkit.getDefaultToolkit().getScreenSize().width; int height = Toolkit.getDefaultToolkit().getScreenSize().height; //然后设置你编写的窗口的初始位置,也就是在中间, frame.setLocation(width / 2 - 200, height / 2 - 150); Lname = new JLabel("姓名");//标签 Lsex = new JLabel("性别"); Lunit = new JLabel("单位"); Lhomephone = new JLabel("住宅电话"); Lemail = new JLabel("Email"); Ltelephone = new JLabel("移动电话"); sure = new JButton("确定"); cancel = new JButton("取消"); JPanel pane1 = new JPanel();//添加面板 JPanel pane2 = new JPanel(); JPanel pane3 = new JPanel(); JPanel pane5 = new JPanel(); c.add(pane1);//将面板添加到容器中 c.add(pane2); c.add(pane3); c.add(pane5); pane1.add(Lname);//将标签添加到面板 pane1.add(Tname); pane1.add(Lsex); pane1.add(Csex); pane2.add(Lunit); pane2.add(Tunit); pane2.add(Lhomephone); pane2.add(Thomephone); pane3.add(Lemail); pane3.add(Temail); pane3.add(Ltelephone); pane3.add(Ttelephone); pane5.add(sure); pane5.add(cancel); sure.addActionListener(new ActionListener() // 设置监听器 { public void actionPerformed(ActionEvent e) // 用匿名内部类实现监听器 { if (Tname.getText().equals(""))//输入的姓名是否为空 /* * 显示一个错误对话框,该对话框显示的 message 为 'alert': * JOptionPane.showMessageDialog(null, "alert", * "alert", JOptionPane.ERROR_MESSAGE); */ JOptionPane.showMessageDialog(null, "录入失败姓名必须填写", "录入结果", JOptionPane.INFORMATION_MESSAGE); else { try { FileWriter AddressBook = new FileWriter("D:\\AddressBook.txt", true);//写入文件 PrintWriter add = new PrintWriter(AddressBook); String s1, s2, s3,s4; if (Tunit.getText().equals(""))//未输入数据 s1 = "无"; else s1 = Tunit.getText(); if (Thomephone.getText().equals("")) s2 = "无"; else s2 = Thomephone.getText(); if (Temail.getText().equals("")) s3 = "无"; else s3 = Temail.getText(); if (Ttelephone.getText().equals("")) s4 = "无"; else s4 = Ttelephone.getText(); add.println(Tname.getText()+ "\t" + Csex.getSelectedItem() + "\t" + s1 + "\t\t" + s2 + "\t\t" + s3 + "\t\t" + s4); add.close(); AddressBook.close(); z = 1; } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } if (y == 0) { JOptionPane.showMessageDialog(null, "录入成功", "录入结果", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(null, "修改成功", "修改结果", JOptionPane.INFORMATION_MESSAGE); } Tname.setText(""); //删除时传入空白串 Tunit.setText(""); Thomephone.setText(""); Temail.setText(""); Ttelephone.setText(""); } } }); cancel.addActionListener(new ActionListener() // 设置监听器 { public void actionPerformed(ActionEvent e) // 用匿名内部类实现监听器 { frame.dispose();//关闭面板 z = 0; } }); } public void actionPerformed(ActionEvent e) { new Type().Type(); } }
怎么解决java网络通信编程ip和port是从文本框中获取的?
为什么我把connect()方法加入button1的事件中就会黑屏 代码如下 客户端: package sunxu.util; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class ClientSocketFrame extends JFrame { /** * */ private static final long serialVersionUID = 1L; private PrintWriter writer; // 声明PrintWriter类对象 private BufferedReader reader; // 声明BufferedReader对象 private Socket socket; // 声明Socket对象 private JTextArea ta_info; // 创建JtextArea对象 JButton button1 = new JButton("Connect"); //private JTextField tf_send; // 创建JtextField对象 private InetAddress sendIp; private int sendPort; private void connect() { // 连接套接字方法 ta_info.append("Connect to server…\n"); // 文本域中信息信息 try { // 捕捉异常 socket = new Socket(sendIp,sendPort); // 实例化Socket对象 while (true) { writer = new PrintWriter(socket.getOutputStream(), true); reader = new BufferedReader(new InputStreamReader(socket .getInputStream())); // 实例化BufferedReader对象 ta_info.append("Client connected…\n"); // 文本域中提示信息 getServerInfo(); } } catch (Exception e) { e.printStackTrace(); // 输出异常信息 } } public static void main(String[] args) { // 主方法 ClientSocketFrame clien = new ClientSocketFrame(); // 创建本例对象 clien.setVisible(true); // 将窗体显示 //clien.connect(); // 调用连接方法 } private void getServerInfo() { try { while (true) { if (reader != null) { String line = reader.readLine();// 读取服务器发送的信息 if (line != null) ta_info.append("接收到服务器发送的信息:" + line + "\n"); // 显示服务器端发送的信息 } } } catch (Exception e) { e.printStackTrace(); } finally { try { if (reader != null) { reader.close();// 关闭流 } if (socket != null) { socket.close(); // 关闭套接字 } } catch (IOException e) { e.printStackTrace(); } } } /** * Create the frame */ public ClientSocketFrame() { super(); setTitle("客户端"); setBounds(100, 100, 361, 257); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JPanel panel = new JPanel(); getContentPane().add(panel, BorderLayout.NORTH); panel.setBorder(BorderFactory.createTitledBorder("客户机设置:")); final JLabel label = new JLabel(); label.setText("Server IP:"); panel.add(label); JTextField tf_sen= new JTextField(); tf_sen.setPreferredSize(new Dimension(50, 25)); panel.add(tf_sen); final JLabel label1 = new JLabel(); label1.setText("Server Port:"); panel.add(label1); JTextField tf_Port = new JTextField(); tf_Port.setPreferredSize(new Dimension(50, 25)); panel.add(tf_Port); final JButton button1 = new JButton("Connect"); button1.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { try { sendIp=InetAddress.getByName(tf_sen.getText()); } catch (UnknownHostException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } sendPort=Integer.parseInt(tf_Port.getText()); ta_info.append("Connect to server…\n"); // 文本域中信息信息 ta_info.append(sendIp+"\n"); // 文本域中信息信息 ta_info.append(sendPort+"\n"); // 文本域中信息信息 connect(); } }); panel.add(button1); final JPanel panel_1 = new JPanel(); getContentPane().add(panel_1, BorderLayout.SOUTH); final JLabel label_1 = new JLabel(); label_1.setText("Say:"); panel_1.add(label_1); JTextField tf_send = new JTextField(); tf_send.setPreferredSize(new Dimension(220, 25)); panel_1.add(tf_send); final JButton button = new JButton(); button.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { writer.println(tf_send.getText()); // 将文本框中信息写入流 ta_info.append("客户端发送的信息:" + tf_send.getText() + "\n"); // 将文本框中信息显示在文本域中 tf_send.setText(""); // 将文本框清空 } }); button.setText("Say"); panel_1.add(button); final JScrollPane scrollPane = new JScrollPane(); getContentPane().add(scrollPane, BorderLayout.CENTER); ta_info = new JTextArea(); scrollPane.setViewportView(ta_info); // } } 服务器: package sunxu.util; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.net.*; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class ServerSocketFrame extends JFrame { //private JTextField tf_send; private JTextArea ta_info; private PrintWriter writer; // 声明PrintWriter类对象 private BufferedReader reader; // 声明BufferedReader对象 private ServerSocket server; // 声明ServerSocket对象 private Socket socket; // 声明Socket对象socket private int sendPort; public void getServer() { try { server = new ServerSocket(sendPort); // 实例化Socket对象 ta_info.append("服务器套接字已经创建成功\n"); // 输出信息 while (true) { // 如果套接字是连接状态 ta_info.append("等待客户机的连接......\n"); // 输出信息 socket = server.accept(); // 实例化Socket对象 reader = new BufferedReader(new InputStreamReader(socket .getInputStream())); // 实例化BufferedReader对象 writer = new PrintWriter(socket.getOutputStream(), true); getClientInfo(); // 调用getClientInfo()方法 } } catch (Exception e) { e.printStackTrace(); // 输出异常信息 } } private void getClientInfo() { try { while (true) { String line = reader.readLine();// 读取客户端发送的信息 if (line != null) ta_info.append("接收到客户机发送的信息:" + line + "\n"); // 显示客户端发送的信息 } } catch (Exception e) { ta_info.append("客户端已退出。\n"); // 输出异常信息 } finally { try { if (reader != null) { reader.close();// 关闭流 } if (socket != null) { socket.close(); // 关闭套接字 } } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { // 主方法 ServerSocketFrame frame = new ServerSocketFrame(); // 创建本类对象 frame.setVisible(true); //frame.getServer(); // 调用方法 } public ServerSocketFrame() { super(); setTitle("服务器端程序"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 379, 260); final JScrollPane scrollPane = new JScrollPane(); getContentPane().add(scrollPane, BorderLayout.CENTER); ta_info = new JTextArea(); scrollPane.setViewportView(ta_info); final JPanel panel = new JPanel(); getContentPane().add(panel, BorderLayout.SOUTH); final JLabel label = new JLabel(); label.setText("Say:"); panel.add(label); JTextField tf_send = new JTextField(); tf_send.setPreferredSize(new Dimension(150, 25)); panel.add(tf_send); final JButton button = new JButton(); button.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { writer.println(tf_send.getText()); // 将文本框中信息写入流 ta_info.append("服务器发送的信息是:" + tf_send.getText() + "\n"); // 将文本框中信息显示在文本域中 tf_send.setText(""); // 将文本框清空 } }); button.setText("Say:"); panel.add(button); final JPanel panel_1 = new JPanel(); getContentPane().add(panel_1, BorderLayout.NORTH); panel_1.setBorder(BorderFactory.createTitledBorder("服务器设置:")); final JLabel label_1 = new JLabel(); label_1.setText("Port:"); JTextField tf_sen= new JTextField(); tf_sen.setPreferredSize(new Dimension(220, 25)); panel_1.add(label_1); panel_1.add(tf_sen); final JButton button1 = new JButton("Strat"); button1.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { sendPort=Integer.parseInt(tf_sen.getText()); getServer(); } }); panel_1.add(button1); } }
不相交类集迷宫求解路径
``` import javax.swing.*; import java.awt.*; import java.util.*; import java.util.List; /** * Created by 伟大的华仔 on 2017-11-30. */ public class Maze extends JFrame { private int row;//行数 private int col; //列数 private DisJoinSet disjSet; private int winHeight=1000;// 行高 private int winWidth=1000;//行宽 public Maze(int row,int col){ this.row = row; this.col = col; this.setTitle("迷宫");//设置标题 this.setSize(winWidth,winHeight);//设置组件大小 this.setVisible(true);//显示或隐藏此 Window this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置用户在此窗体上发起 "close" 时默认执行的操作 EXIT_ON_CLOSE(在 JFrame 中定义):使用 System exit 方法退出应用程序 } public static void main(String[] args) { /** * 定义迷宫的大小,必须是正方形的 * */ int rowCount = 100; int colCount = 100; Maze maze = new Maze(rowCount,colCount); } @Override public void paint(Graphics g){ super.paint(g); /** * 申请一个String集合,放置合并的节点 * */ List<Integer>DisList = new LinkedList<>(); //背景为白色 g.setColor(Color.white); g.fillRect(0, 0, winWidth, winHeight);//窗口填充矩形 g.setColor(Color.black); final int extraWidth = 20; final int cellWidth = (winWidth-2*extraWidth)/row;//定义每个格子的宽度 final int cellHeight = (winHeight-4*extraWidth)/col;//定义每个格子的高度 for(int i=0;i<row;i++) { for(int j=0;j<col;j++) { //初始化m*n矩阵格子 g.drawRect(i*cellWidth+extraWidth,j*cellHeight+2*extraWidth, cellWidth, cellHeight); } } int lastPos = getLastElePos();//迷宫最后一个格式的代表数字 //起点,终点特殊处理 g.setColor(Color.red); g.fillRect(extraWidth, 2*extraWidth, cellWidth, cellHeight); g.fillRect((lastPos% row)*cellWidth + extraWidth,(lastPos/ row)*cellHeight + 2*extraWidth, cellWidth, cellHeight); this.setDisjSet(new DisJoinSet(row*col)); // 路径记录操作 ArrayList<LinkedList<Integer>> adjoinTable = new ArrayList(); Stack<Integer> pathSearch = new Stack<Integer>(); pathSearch.push(0); for (int i = 0;i<row*col;i++){ LinkedList<Integer> temp = new LinkedList<Integer>(); temp.add(i); adjoinTable.add(temp); temp.clear(); } g.setColor(Color.white); //用后景色擦色 while(disjSet.find(0) != disjSet.find(lastPos)){//如果起点和终点还没在同一个等价类 /* * 在迷宫内随机挖一个点,再找到该点周围一点,使这两个点落在同一个等价类 */ Random random = new Random(); int randPos = random.nextInt(lastPos+1);//+1是为了能随机到最后一位 int rowIndex = randPos % row; int colIndex = randPos / col; List<Integer> neighborPos = getNeighborNums(rowIndex, colIndex) ; int randNeighbor = neighborPos.get(random.nextInt(neighborPos.size())); if(disjSet.find(randPos) == disjSet.find(randNeighbor)){//两点在同一个等价类 continue; }else{ int aRoot = disjSet.find(randPos); int bRoot = disjSet.find(randNeighbor); disjSet.union(aRoot, bRoot); DisList.add(randPos); DisList.add(randNeighbor); // /** // * 打印搜索过程 // * */ // System.out.println("***过程分析*****************"+Arrays.toString(this.disjSet.getEleRoots())); int maxNum = Math.max(randPos, randNeighbor);//取得较大点 int x1=0,y1=0,x2=0,y2=0; if(Math.abs(randPos-randNeighbor) == 1){//说明在同一行,用竖线隔开 x1= x2=(maxNum% row)*cellWidth + extraWidth; y1=(maxNum/ row)*cellHeight + 2*extraWidth; y2=y1+cellHeight; }else{//说明在同一列,用横线隔开 y1=y2=(maxNum/ row)*cellHeight + 2*extraWidth; x1=(maxNum% row)*cellWidth + extraWidth; x2=x1+cellWidth; } g.drawLine(x1, y1, x2, y2); } } long start = System.currentTimeMillis(); /** * 打印数组 * */ // System.out.println("***最终结构********************"+Arrays.toString(this.disjSet.getEleRoots())); // for (Iterator it = DisList.iterator();it.hasNext();){ // System.out.println("***节点***"+it.next()); // } for (int i = 0;i<DisList.size();i=i+2){ adjoinTable.get(DisList.get(i)).add(DisList.get(i+1)); adjoinTable.get(DisList.get(i+1)).add(DisList.get(i)); } // for (int i = 0;i<adjoinTable.size();i++){ // System.out.println("链表内容"+Arrays.toString(adjoinTable.get(i).toArray())); // } /** * 算法步骤 * 1、检索i节点的联通节点 * 2、存在就放入栈中(前提为栈中没有该元素),不存在弹出栈顶元素(删除邻接表中的数据),或者为终点元素结束 * 3、重复步骤1 * */ while (true){//while开始 if (pathSearch.isEmpty()){ System.out.println("栈为空,迷宫没有路径"); break; } if (pathSearch.peek()==(row*col-1)){ System.out.println("迷宫已破解"); break; } if (adjoinTable.get(pathSearch.peek()).size()==1 && pathSearch.peek() != 0){ Integer temp = pathSearch.pop(); if(pathSearch.isEmpty()){ System.out.println("栈为空,迷宫没有路径"); break; }else { adjoinTable.get(pathSearch.peek()).remove(temp); adjoinTable.get(temp).remove(pathSearch.peek()); } }else { if (pathSearch.search(adjoinTable.get(pathSearch.peek()).get(0))!= -1 ){ if (adjoinTable.get(pathSearch.peek()).size()>1){ pathSearch.push(adjoinTable.get(pathSearch.peek()).get(1)); // Iterator<Integer> boy = adjoinTable.get(pathSearch.peek()).listIterator(); // while (boy.hasNext()){ // int girl = boy.next(); // if (!pathSearch.contains(girl)){ // pathSearch.push(girl); // } // } } }else { pathSearch.push(adjoinTable.get(pathSearch.peek()).get(0)); } } }//while结束 /** * 输出路径 * */ // System.out.println("迷宫路径"+Arrays.toString(pathSearch.toArray())); g.setColor(Color.red); while (!pathSearch.isEmpty()){ int boy = pathSearch.pop(); //左右 g.fillOval((boy% row)*cellWidth + cellWidth/4+extraWidth,(boy/ row)*cellHeight + cellHeight/4+2*extraWidth, cellWidth/2, cellHeight/2); } // long end = System.currentTimeMillis(); System.out.println("时间流程:"+Long.toString(end-start)+"ms"); adjoinTable.clear(); pathSearch.clear(); } /** * 取得目标坐标点周围四个有效点 */ public List<Integer> getNeighborNums(int rowIndex,int colIndex){ List<Integer> neighborPos = new ArrayList<Integer>(4); //右元素 if(isPointInMaze(rowIndex+1,colIndex)){ neighborPos.add(getCoordinateNum(rowIndex+1,colIndex)); } //下元素 if(isPointInMaze(rowIndex,colIndex+1)){ neighborPos.add(getCoordinateNum(rowIndex,colIndex+1)); } //左元素 if(isPointInMaze(rowIndex-1,colIndex)){ neighborPos.add(getCoordinateNum(rowIndex-1,colIndex)); } //上元素 if(isPointInMaze(rowIndex,colIndex-1)){ neighborPos.add(getCoordinateNum(rowIndex,colIndex-1)); } return neighborPos; } public int getLastElePos(){ return row*col-1; } public DisJoinSet getDisjSet() { return disjSet; } public void setDisjSet(DisJoinSet disjSet) { this.disjSet = disjSet; } /** * 根据坐标返回对应的值 * 例如在4*3矩阵,(0,0)返回0;(3,2)返回10 */ public int getCoordinateNum(int x,int y){ return y*col + x; } /** * 判断给定坐标是否在迷宫矩阵内 */ public boolean isPointInMaze(int x,int y){ if(x < 0 || y < 0) return false; return x < row && y <col; } } ``` 目前状态:100x100的求解需要5s,200x200的需要20s左右。 问题:paint函数重画存在闪烁问题。求解路径算法需要优化。
串口和串口轉usb的區別
圖一: ![知道串口轉usb](https://img-ask.csdn.net/upload/201811/22/1542851006_844269.png) 圖二: ![這是串口的](https://img-ask.csdn.net/upload/201811/22/1542851037_642924.png) # **提問:圖一圖二可不可以都用下面的代碼獲取數據:(圖二可以用下面的代碼獲取數據,但是圖一不知道行不行,請各位大佬路過看看)** ``` package com.lyf.test2; import java.awt.Button; import java.awt.Color; import java.awt.Font; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.Label; import java.awt.Toolkit; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JOptionPane; import com.lyf.test2.SerialTool; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener; import serialException.ExceptionWriter; import serialException.NoSuchPort; import serialException.NotASerialPort; import serialException.PortInUse; import serialException.ReadDataFromSerialPortFailure; import serialException.SendDataToSerialPortFailure; import serialException.SerialPortInputStreamCloseFailure; import serialException.SerialPortOutputStreamCloseFailure; import serialException.SerialPortParameterFailure; import serialException.TooManyListeners; /** * 主程序 * @author zhong * */ public class Client extends Frame{ private static final long serialVersionUID = 1L; /** * 程序界面宽度 */ public static final int WIDTH = 800; /** * 程序界面高度 */ public static final int HEIGHT = 620; /** * 程序界面出现位置(横坐标) */ public static final int LOC_X = 200; /** * 程序界面出现位置(纵坐标) */ public static final int LOC_Y = 70; private static SerialPort serialPort = null; //保存串口对象 private Font font = new Font("微软雅黑", Font.BOLD, 25);//文本框字體 private Label weight = new Label("暫無數據", Label.CENTER); //重量 private Button saveButton = new Button("保存");//设置button按钮 Image offScreen = null; //用于双缓冲 //设置window的icon(这里我自定义了一下Windows窗口的icon图标,因为实在觉得哪个小咖啡图标不好看 = =) Toolkit toolKit = getToolkit();//返回此窗体的工具包 Image icon = toolKit.getImage(Client.class.getResource("computer.png"));//獲取當前類所在的包下面的圖片 /** * 主方法 * @param args * @throws SerialPortOutputStreamCloseFailure * @throws SendDataToSerialPortFailure * @throws PortInUse * @throws NoSuchPort * @throws NotASerialPort * @throws SerialPortParameterFailure */ public static void main(String[] args) throws SendDataToSerialPortFailure, SerialPortOutputStreamCloseFailure, SerialPortParameterFailure, NotASerialPort, NoSuchPort, PortInUse { new Client().launchFrame(); } /** * 主菜单窗口显示; * 添加Label、按钮、下拉条及相关事件监听; */ public void launchFrame() { this.setBounds(LOC_X, LOC_Y, WIDTH, HEIGHT); this.setTitle("CDIO工程项目"); this.setIconImage(icon); this.setBackground(Color.white); this.setLayout(null); //改變按鈕的事件监听 this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent arg0) { if (serialPort != null) { //程序退出时关闭串口释放资源 SerialTool.closePort(serialPort); } System.exit(0); } }); //设置文本框位置、背景颜色、是否粗体、字体颜色 weight.setBounds(140, 103, 225, 50); weight.setBackground(Color.black); weight.setFont(font); weight.setForeground(Color.white); add(weight); //添加保存按钮 saveButton.setBounds(250, 490, 300, 50); saveButton.setBackground(Color.lightGray); saveButton.setFont(new Font("微软雅黑", Font.BOLD, 20)); saveButton.setForeground(Color.darkGray); add(saveButton); //添加打开串口按钮的事件监听 try { //指定端口名及波特率的串口对象 serialPort = SerialTool.openPort("COM1", 4800); //在该串口对象上添加监听器 SerialTool.addListener(serialPort, new SerialListener()); } catch (SerialPortParameterFailure | NotASerialPort | NoSuchPort | PortInUse | TooManyListeners e1) { //发生错误时使用一个Dialog提示具体的错误信息 JOptionPane.showMessageDialog(null, e1, "错误", JOptionPane.INFORMATION_MESSAGE); } this.setResizable(false);//设置此框架是否可由用户调整大小。 this.setVisible(true); //显示窗口 new Thread(new RepaintThread()).start(); //启动重画线程 } /** * 画出主界面组件元素 * 设置button的字体颜色、设置字体样式 是否粗体 字体大小、文本、位置 */ public void paint(Graphics g) { g.setColor(Color.black); g.setFont(new Font("微软雅黑", Font.BOLD, 25)); g.drawString(" 重量: ", 45, 130); } /** * 双缓冲方式重画界面各元素组件 */ public void update(Graphics g) { if (offScreen == null) offScreen = this.createImage(WIDTH, HEIGHT); Graphics gOffScreen = offScreen.getGraphics(); Color c = gOffScreen.getColor(); gOffScreen.setColor(Color.white); gOffScreen.fillRect(0, 0, WIDTH, HEIGHT); //重画背景画布 this.paint(gOffScreen); //重画界面元素 gOffScreen.setColor(c); g.drawImage(offScreen, 0, 0, null); //将新画好的画布“贴”在原画布上 } /** * 以内部类形式创建一个串口监听类 * @author zhong * */ private class SerialListener implements SerialPortEventListener { /** * 处理监控到的串口事件 */ public void serialEvent(SerialPortEvent serialPortEvent) { try { // 等待1秒钟让串口把数据全部接收后在处理 Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } switch (serialPortEvent.getEventType()) { case SerialPortEvent.BI: // 10 通讯中断 JOptionPane.showMessageDialog(null, "与串口设备通讯中断", "错误", JOptionPane.INFORMATION_MESSAGE); break; case SerialPortEvent.OE: // 7 溢位(溢出)错误 case SerialPortEvent.FE: // 9 帧错误 case SerialPortEvent.PE: // 8 奇偶校验错误 case SerialPortEvent.CD: // 6 载波检测 case SerialPortEvent.CTS: // 3 清除待发送数据 case SerialPortEvent.DSR: // 4 待发送数据准备好了 case SerialPortEvent.RI: // 5 振铃指示 case SerialPortEvent.OUTPUT_BUFFER_EMPTY: // 2 输出缓冲区已清空 break; case SerialPortEvent.DATA_AVAILABLE: // 1 串口存在可用数据 byte[] data = null; try { if (serialPort == null) {//判断串口对象是否为空 JOptionPane.showMessageDialog(null, "串口对象为空!监听失败!", "错误", JOptionPane.INFORMATION_MESSAGE); }else { data = SerialTool.readFromPort(serialPort); //读取数据,存入字节数组 //System.out.println(new String(data)); //自定义解析过程 if (data != null && data.length > 1) { //检查数据是否读取正确 try { weight.setText(new String(data) + " g"); } catch (ArrayIndexOutOfBoundsException e) { JOptionPane.showMessageDialog(null, "数据解析过程出错,更新界面数据失败!请检查设备或程序!", "错误", JOptionPane.INFORMATION_MESSAGE); System.exit(0); } }else { JOptionPane.showMessageDialog(null, "读取数据过程中未获取到有效数据!请检查设备或程序!", "错误", JOptionPane.INFORMATION_MESSAGE); System.exit(0); } } } catch (ReadDataFromSerialPortFailure | SerialPortInputStreamCloseFailure e) { JOptionPane.showMessageDialog(null, e, "错误", JOptionPane.INFORMATION_MESSAGE); System.exit(0); //发生读取错误时显示错误信息后退出系统 } break; } } } /** * 重画线程(每隔30毫秒重画一次) */ private class RepaintThread implements Runnable { public void run() { while(true) { //调用重画方法 repaint(); try { Thread.sleep(30); } catch (InterruptedException e) { String err = ExceptionWriter.getErrorInfoFromException(e); JOptionPane.showMessageDialog(null, err, "错误", JOptionPane.INFORMATION_MESSAGE); System.exit(0); } } } } } ``` ``` package com.lyf.test2; import java.io.IOException; import java.io.InputStream; import java.util.TooManyListenersException; import gnu.io.CommPort; import gnu.io.CommPortIdentifier; import gnu.io.NoSuchPortException; import gnu.io.PortInUseException; import gnu.io.SerialPort; import gnu.io.SerialPortEventListener; import gnu.io.UnsupportedCommOperationException; import serialException.*; /** * 串口服务类,提供打开、关闭串口,读取、发送串口数据等服务(采用单例设计模式) * @author zhong * */ public class SerialTool { private static SerialTool serialTool = null; static { //在该类被ClassLoader加载时就初始化一个SerialTool对象 if (serialTool == null) { serialTool = new SerialTool(); } } //私有化SerialTool类的构造方法,不允许其他类生成SerialTool对象 private SerialTool() {} /** * 获取提供服务的SerialTool对象 * @return serialTool */ public static SerialTool getSerialTool() { if (serialTool == null) { serialTool = new SerialTool(); } return serialTool; } /** * 打开串口 * @param portName 端口名称 * @param baudrate 波特率 * @return 串口对象 * @throws SerialPortParameterFailure 设置串口参数失败 * @throws NotASerialPort 端口指向设备不是串口类型 * @throws NoSuchPort 没有该端口对应的串口设备 * @throws PortInUse 端口已被占用 */ public static final SerialPort openPort(String portName, int baudrate) throws SerialPortParameterFailure, NotASerialPort, NoSuchPort, PortInUse { try { //通过端口名识别端口 CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName); //打开端口,并给端口名字和一个timeout(打开操作的超时时间) CommPort commPort = portIdentifier.open(portName, 2000); //判断是不是串口 if (commPort instanceof SerialPort) { SerialPort serialPort = (SerialPort) commPort; try { //设置一下串口的波特率等参数 serialPort.setSerialPortParams(baudrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException e) { throw new SerialPortParameterFailure(); } //System.out.println("Open " + portName + " sucessfully !"); return serialPort; } else { //不是串口 throw new NotASerialPort(); } } catch (NoSuchPortException e1) { throw new NoSuchPort(); } catch (PortInUseException e2) { throw new PortInUse(); } } /** * 关闭串口 * @param serialport 待关闭的串口对象 */ public static void closePort(SerialPort serialPort) { if (serialPort != null) { serialPort.close(); serialPort = null; } } /** * 从串口读取数据 * @param serialPort 当前已建立连接的SerialPort对象 * @return 读取到的数据 * @throws ReadDataFromSerialPortFailure 从串口读取数据时出错 * @throws SerialPortInputStreamCloseFailure 关闭串口对象输入流出错 */ public static byte[] readFromPort(SerialPort serialPort) throws ReadDataFromSerialPortFailure, SerialPortInputStreamCloseFailure { InputStream in = null; byte[] bytes = null; try { in = serialPort.getInputStream();//取入数据 int bufflenth = in.available(); //获取buffer里的数据长度 while (bufflenth != 0) { bytes = new byte[bufflenth]; //初始化byte数组为buffer中数据的长度 in.read(bytes); bufflenth = in.available(); } } catch (IOException e) { throw new ReadDataFromSerialPortFailure(); } finally { try { if (in != null) { in.close(); in = null; } } catch(IOException e) { throw new SerialPortInputStreamCloseFailure(); } } return bytes; } /** * 添加监听器 * @param port 串口对象 * @param listener 串口监听器 * @throws TooManyListeners 监听类对象过多 */ public static void addListener(SerialPort port, SerialPortEventListener listener) throws TooManyListeners { try { //给串口添加监听器 port.addEventListener(listener); //设置当有数据到达时唤醒监听接收线程 port.notifyOnDataAvailable(true); //设置当通信中断时唤醒中断线程 port.notifyOnBreakInterrupt(true); } catch (TooManyListenersException e) { throw new TooManyListeners(); } } } ```
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
YouTube排名第一的励志英文演讲《Dream(梦想)》
Idon’t know what that dream is that you have, I don't care how disappointing it might have been as you've been working toward that dream,but that dream that you’re holding in your mind, that it’s po...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车?某胡同口的煎饼摊一年能卖出多少个煎饼?深圳有多少个产品经理?一辆公交车里能装下多少个乒乓球?一个正常成年人有多少根头发?这类估算问题,被称为费米问题,是以科学家费米命名的。为什么面试会问这种问题呢?这类问题能把两类人清楚地区分出来。一类是具有文科思维的人,擅长赞叹和模糊想象,它主要依靠的是人的第一反应和直觉,比如小孩...
全网阅读过20k的Java集合框架常见面试题总结!
本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star!【Java学习 面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。欢迎 Star!)。 文末有我的公众号,公众号里有我最新整理的Java学习资料,免费分享。 这么好的文章,一定好先赞后看!!!建议养成这个好习惯!!爱你们!???? 剖析面试最常见问题之Java集合框架 当了...
17张图带你解析红黑树的原理!保证你能看懂!
二叉查找树 由于红黑树本质上就是一棵二叉查找树,所以在了解红黑树之前,咱们先来看下二叉查找树。 二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树: 若任意结点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若任意结点的...
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。 背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法 不过,当我看了源代码之后 这程序不到50行 尽管我有多年的Python经验,但我竟然一时也没有看懂 当然啦,原作者也说了,这个代码也是在无聊中诞生的,平时撸码是不写中文变量名的, 中文...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
MySQL数据库总结
一、数据库简介 数据库(Database,DB)是按照数据结构来组织,存储和管理数据的仓库。 典型特征:数据的结构化、数据间的共享、减少数据的冗余度,数据的独立性。 关系型数据库:使用关系模型把数据组织到数据表(table)中。现实世界可以用数据来描述。 主流的关系型数据库产品:Oracle(Oracle)、DB2(IBM)、SQL Server(MS)、MySQL(Oracle)。 数据表:数...
相关热词 c# 图片上传 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd
立即提问