java版本转换小工具

工作之余写了一个转换小工具,具有以下功能:

  • 时间戳转换
  • Base64编码/解码
  • URL编码/解码
  • JSON格式化

时间戳转换

package org.binbin.container.panel;import javax.swing.*;
import java.awt.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;/*** * Copyright © 启明星辰 版权所有** @author 胡海斌/hu_haibin@venusgroup.com.cn* 2023/9/28 14:20*/
public class TimePanel extends JPanel {private static final String template = "当前时间:TIME    当前时间戳:STAMP";private static final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");private ExecutorService pool = Executors.newSingleThreadExecutor();private boolean stop;private JTextField currentTimeField;private JButton stopButton;private JTextField[] textFields;private JButton convertBuffon1;private JButton convertBuffon2;private JComboBox<String> comboBox1;private JComboBox<String> comboBox2;public TimePanel() {currentTimeField = new JTextField(template);currentTimeField.setToolTipText("请暂停时间后再复制");currentTimeField.setEditable(false);currentTimeField.setBorder(BorderFactory.createEmptyBorder());stopButton = new JButton("暂停");stopButton.addActionListener(e -> {stop = !stop;stopButton.setText(stop ? "继续" : "暂停");if(!stop) {pool.submit(new TimeDriver());}});pool.submit(new TimeDriver());JPanel panel1 = new JPanel();panel1.setLayout(new FlowLayout());panel1.add(currentTimeField);panel1.add(stopButton);setLayout(new FlowLayout());add(panel1);textFields = new JTextField[4];for (int i = 0; i < textFields.length; i++) {textFields[i] = new JTextField(12);}convertBuffon1 = new JButton("转换 >");convertBuffon2 = new JButton("转换 >");convertBuffon1.addActionListener(e -> {try {long time = Long.parseLong(textFields[0].getText());int index = comboBox1.getSelectedIndex();if(index == 1) {time *= 1000;}Date date = new Date();date.setTime(time);textFields[1].setText(df.format(date));} catch (Exception ex) {ex.printStackTrace();}});convertBuffon2.addActionListener(e -> {try {Date date = df.parse(textFields[2].getText());int index = comboBox2.getSelectedIndex();long time = date.getTime();if(index == 1) {time /= 1000;}textFields[3].setText(time + "");} catch (Exception ex) {ex.printStackTrace();}});comboBox1 = new JComboBox<>();comboBox2 = new JComboBox<>();comboBox1.addItem("毫秒(ms)");comboBox1.addItem("秒(s)");comboBox2.addItem("毫秒(ms)");comboBox2.addItem("秒(s)");JPanel panel2 = new JPanel();panel2.add(textFields[0]);panel2.add(comboBox1);panel2.add(convertBuffon1);panel2.add(textFields[1]);JPanel panel3 = new JPanel();panel3.add(textFields[2]);panel3.add(convertBuffon2);panel3.add(textFields[3]);panel3.add(comboBox2);init();add(panel2);add(panel3);}public void init() {Date date = new Date();textFields[0].setText(date.getTime() + "");textFields[2].setText(df.format(date));}class TimeDriver implements Runnable {private final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");@Overridepublic void run() {while (!stop) {try {Date now = new Date();String text = template.replace("TIME", df.format(now)).replace("STAMP", now.getTime() + "");currentTimeField.setText(text);Thread.sleep(20);} catch (Exception e) {e.printStackTrace();}}}}
}

Base64编码/解码

package org.binbin.container.panel;import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Base64;/*** * Copyright © 启明星辰 版权所有** @author 胡海斌/hu_haibin@venusgroup.com.cn* 2023/10/27 11:30*/
public class Base64Panel extends JPanel implements ActionListener {private JButton[] buttons;private String[] buttonNames = {"编码", "解码", "复制", "清空"};private JTextArea sourceTextArea;private JTextArea targetTextArea;public Base64Panel() {setLayout(new BorderLayout());sourceTextArea = new JTextArea(10, 20);targetTextArea = new JTextArea(10, 20);sourceTextArea.setLineWrap(true);targetTextArea.setLineWrap(true);sourceTextArea.setMargin(new Insets(10, 10, 10, 10));targetTextArea.setMargin(new Insets(10, 10, 10, 10));targetTextArea.setEditable(false);Box box=Box.createHorizontalBox();box.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));box.add(new JScrollPane(sourceTextArea));box.add(Box.createHorizontalStrut(10));box.add(new JLabel("==>", JLabel.CENTER));box.add(Box.createHorizontalStrut(10));box.add(new JScrollPane(targetTextArea));add(box, BorderLayout.CENTER);JPanel buttonPanel = new JPanel();buttons = new JButton[buttonNames.length];for (int i = 0; i < buttons.length; i++) {buttons[i] = new JButton(buttonNames[i]);buttons[i].addActionListener(this);buttonPanel.add(buttons[i]);}add(buttonPanel, BorderLayout.SOUTH);}@Overridepublic void actionPerformed(ActionEvent e) {switch (e.getActionCommand()) {case "编码":try {String text = sourceTextArea.getText();String result = Base64.getEncoder().encodeToString(text.getBytes("UTF-8"));targetTextArea.setText(result);} catch (Exception ex) {ex.printStackTrace();}break;case "解码":try {String text = sourceTextArea.getText();String result = new String(Base64.getDecoder().decode(text), "UTF-8");targetTextArea.setText(result);} catch (Exception ex) {ex.printStackTrace();}break;case "复制":try {String text = targetTextArea.getText();Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();clipboard.setContents(new StringSelection(text), null);JOptionPane.showMessageDialog(this, "复制成功!", "结果", JOptionPane.INFORMATION_MESSAGE);} catch (Exception ex) {ex.printStackTrace();}break;case "清空":sourceTextArea.setText("");targetTextArea.setText("");break;}}
}

URL编码/解码

package org.binbin.container.panel;import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionListener;
import java.net.URLDecoder;
import java.net.URLEncoder;/*** * Copyright © 启明星辰 版权所有** @author 胡海斌/hu_haibin@venusgroup.com.cn* 2023/10/28 11:30*/
public class UrlPanel extends JPanel {private JButton[] buttons;private String[] buttonNames = {"编码", "解码", "复制", "清空"};private JTextArea sourceTextArea;private JTextArea targetTextArea;public UrlPanel() {setLayout(new BorderLayout());Box box=Box.createHorizontalBox();box.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));sourceTextArea = new JTextArea(10, 20);targetTextArea = new JTextArea(10, 20);sourceTextArea.setLineWrap(true);targetTextArea.setLineWrap(true);sourceTextArea.setMargin(new Insets(10, 10, 10, 10));targetTextArea.setMargin(new Insets(10, 10, 10, 10));targetTextArea.setEditable(false);box.add(new JScrollPane(sourceTextArea));box.add(Box.createHorizontalStrut(10));box.add(new JLabel("==>", JLabel.CENTER));box.add(Box.createHorizontalStrut(10));box.add(new JScrollPane(targetTextArea));add(box, BorderLayout.CENTER);JPanel buttonPanel = new JPanel();buttons = new JButton[buttonNames.length];ActionListener listener = e -> {switch (e.getActionCommand()) {case "编码":try {String text = sourceTextArea.getText();String result = URLEncoder.encode(text, "UTF-8");targetTextArea.setText(result);} catch (Exception ex) {ex.printStackTrace();}break;case "解码":try {String text = sourceTextArea.getText();String result = URLDecoder.decode(text, "UTF-8");targetTextArea.setText(result);} catch (Exception ex) {ex.printStackTrace();}break;case "复制":try {String text = targetTextArea.getText();Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();clipboard.setContents(new StringSelection(text), null);JOptionPane.showMessageDialog(this, "复制成功!", "结果", JOptionPane.INFORMATION_MESSAGE);} catch (Exception ex) {ex.printStackTrace();}break;case "清空":sourceTextArea.setText("");targetTextArea.setText("");break;}};for (int i = 0; i < buttons.length; i++) {buttons[i] = new JButton(buttonNames[i]);buttons[i].addActionListener(listener);buttonPanel.add(buttons[i]);}add(buttonPanel, BorderLayout.SOUTH);}
}

JSON格式化

package org.binbin.container.panel;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson2.JSONObject;import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;/*** * Copyright © 启明星辰 版权所有** @author 胡海斌/hu_haibin@venusgroup.com.cn* 2023/11/1 14:38*/
public class JsonPanel extends JPanel implements ActionListener, DocumentListener {private JButton[] buttons;private String[] buttonNames = {"复制", "清空"};private JTextArea sourceTextArea;private JTextArea targetTextArea;public JsonPanel() {setLayout(new BorderLayout());sourceTextArea = new JTextArea(10, 20);targetTextArea = new JTextArea(10, 20);sourceTextArea.setLineWrap(true);targetTextArea.setLineWrap(true);sourceTextArea.setMargin(new Insets(10, 10, 10, 10));targetTextArea.setMargin(new Insets(10, 10, 10, 10));sourceTextArea.setTabSize(2);targetTextArea.setTabSize(2);targetTextArea.setEditable(false);Box box=Box.createHorizontalBox();box.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));box.add(new JScrollPane(sourceTextArea));box.add(Box.createHorizontalStrut(10));box.add(new JLabel("==>", JLabel.CENTER));box.add(Box.createHorizontalStrut(10));box.add(new JScrollPane(targetTextArea));add(box, BorderLayout.CENTER);JPanel buttonPanel = new JPanel();buttons = new JButton[buttonNames.length];for (int i = 0; i < buttons.length; i++) {buttons[i] = new JButton(buttonNames[i]);buttons[i].addActionListener(this);buttonPanel.add(buttons[i]);}add(buttonPanel, BorderLayout.SOUTH);sourceTextArea.getDocument().addDocumentListener(this);}@Overridepublic void actionPerformed(ActionEvent e) {switch (e.getActionCommand()) {case "复制":try {String text = targetTextArea.getText();Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();clipboard.setContents(new StringSelection(text), null);JOptionPane.showMessageDialog(this, "复制成功!", "结果", JOptionPane.INFORMATION_MESSAGE);} catch (Exception ex) {ex.printStackTrace();}break;case "清空":sourceTextArea.setText("");targetTextArea.setText("");break;}}private void format() {try {String text = sourceTextArea.getText();if(text == null || text.trim().equals("")) {return;}JSONObject object = JSONObject.parseObject(text);String pretty = JSON.toJSONString(object, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteDateUseDateFormat);targetTextArea.setText(pretty);} catch (Exception ex) {targetTextArea.setText("");}}@Overridepublic void insertUpdate(DocumentEvent documentEvent) {format();}@Overridepublic void removeUpdate(DocumentEvent documentEvent) {format();}@Overridepublic void changedUpdate(DocumentEvent documentEvent) {format();}
}

工具类

package org.binbin.util;import javax.swing.*;
import java.awt.*;/*** * Copyright © 启明星辰 版权所有** @author 胡海斌/hu_haibin@venusgroup.com.cn* 2023/10/28 11:05*/
public class FrameUtil {public static void center(JFrame frame) {Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();frame.setLocation((screenSize.width - frame.getWidth()) / 2, (screenSize.height - frame.getHeight()) / 2);}
}

主窗体

package org.binbin.container;import org.binbin.container.panel.Base64Panel;
import org.binbin.container.panel.JsonPanel;
import org.binbin.container.panel.TimePanel;
import org.binbin.container.panel.UrlPanel;
import org.binbin.util.FrameUtil;import javax.swing.*;
import java.awt.event.KeyEvent;/*** * Copyright © 启明星辰 版权所有** @author 胡海斌/hu_haibin@venusgroup.com.cn* 2023/10/28 10:59*/
public class MainFrame extends JFrame {private static final String[] titles = new String[]{"时间戳转换", "Base64编码/解码", "URL编码/解码", "JSON格式化"};private JTabbedPane tabbedPane;private JPanel base64Panel;private JPanel urlPanel;private TimePanel timePanel;private JsonPanel jsonPanel;public MainFrame() {setTitle("工具箱 v1.0");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(600, 400);FrameUtil.center(this);JMenuBar bar = new JMenuBar();setJMenuBar(bar);JMenu featureMenu = new JMenu("功能(F)");featureMenu.setMnemonic(KeyEvent.VK_F);for (int i = 0; i < titles.length; i++) {JMenuItem item = new JMenuItem(titles[i]);final int index = i;item.addActionListener(e -> {if(tabbedPane.getSelectedIndex() == 0) {timePanel.init();}tabbedPane.setSelectedIndex(index);});featureMenu.add(item);}featureMenu.addSeparator();JMenuItem exitItem = new JMenuItem("退出(E)");exitItem.setMnemonic(KeyEvent.VK_E);exitItem.addActionListener(e -> {System.exit(0);});featureMenu.add(exitItem);bar.add(featureMenu);JMenu helpMenu = new JMenu("帮助(H)");helpMenu.setMnemonic(KeyEvent.VK_H);JMenuItem aboutItem = new JMenuItem("关于(A)");aboutItem.setMnemonic(KeyEvent.VK_A);aboutItem.addActionListener(e -> {String msg = "<html><body><p style='font-weight:bold;font-size:14px;'>工具箱 v1.0</p><br/><p style='font-weight:normal'>作者:斌斌<br/>邮箱:hello@test.com<br/>日期:2023/09/28<br/><br/>欢迎您使用本工具箱!如果有什么建议,请给作者发邮件。</p></body></html>";JOptionPane.showMessageDialog(this, msg, "关于", JOptionPane.INFORMATION_MESSAGE);});helpMenu.add(aboutItem);bar.add(helpMenu);tabbedPane = new JTabbedPane();add(tabbedPane);base64Panel = new Base64Panel();urlPanel = new UrlPanel();timePanel = new TimePanel();jsonPanel = new JsonPanel();tabbedPane.add(titles[0], timePanel);tabbedPane.add(titles[1], base64Panel);tabbedPane.add(titles[2], urlPanel);tabbedPane.add(titles[3], jsonPanel);tabbedPane.addChangeListener(e -> {if(tabbedPane.getSelectedIndex() == 2) {timePanel.init();}});}
}

启动类

package org.binbin;import org.binbin.container.MainFrame;import java.awt.*;/*** 小工具* @author binbin* 2023/10/27 11:30*/
public class App
{public static void main( String[] args ){EventQueue.invokeLater(() -> {new MainFrame().setVisible(true);});}
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.hbin</groupId><artifactId>tool</artifactId><version>1.0-SNAPSHOT</version><name>info</name><url>www.binbin.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.32</version></dependency></dependencies><build><plugins><!-- 使用maven-assembly-plugin插件打包 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.2.0</version><configuration><archive><manifest><mainClass>org.binbin.App</mainClass></manifest></archive><descriptorRefs><!-- 可执行jar名称结尾--><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin><!--配置生成Javadoc包--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId><version>2.10.4</version><configuration><!--指定编码为UTF-8--><encoding>UTF-8</encoding><aggregate>true</aggregate><charset>UTF-8</charset><docencoding>UTF-8</docencoding></configuration><executions><execution><id>attach-javadocs</id><goals><goal>jar</goal></goals></execution></executions></plugin><!--配置生成源码包--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>3.0.1</version><executions><execution><id>attach-sources</id><goals><goal>jar</goal></goals></execution></executions></plugin></plugins></build>
</project>

运行效果图

1. 菜单栏

在这里插入图片描述

2. 关于

在这里插入图片描述

3. 功能页面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/185608.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【pytest】html报告修改和汉化

前言 Pytest框架可以使用两种测试报告&#xff0c;其中一种就是使用pytest-html插件生成的测试报告&#xff0c;但是报告中有一些信息没有什么用途或者显示的不太好看&#xff0c;还有一些我们想要在报告中展示的信息却没有&#xff0c;最近又有人问我pytest-html生成的报告&a…

[论文阅读]PV-RCNN++

PV-RCNN PV-RCNN: Point-Voxel Feature Set Abstraction With Local Vector Representation for 3D Object Detection 论文网址&#xff1a;PV-RCNN 论文代码&#xff1a;PV-RCNN 简读论文 这篇论文提出了两个用于3D物体检测的新框架PV-RCNN和PV-RCNN,主要的贡献如下: 提出P…

Figma转Sketch文件教程,超简单!

相信大家做设计的都多多少少听过一点Figma和Sktech&#xff0c;这2个设计软件是目前市场上很受欢迎的专业UI设计软件&#xff0c;在全球各地都有很多粉丝用户。但是相对来说&#xff0c;Figma与Sketch只支持iOS系统有所不同&#xff0c;Figma是一个在线设计软件&#xff0c;不限…

IBM Qiskit量子机器学习速成(一)

声明&#xff1a;本篇笔记基于IBM Qiskit量子机器学习教程的第一节&#xff0c;中文版译文详见&#xff1a;https://blog.csdn.net/qq_33943772/article/details/129860346?spm1001.2014.3001.5501 概述 首先导入关键的包 from qiskit import QuantumCircuit from qiskit.u…

HackTheBox-Starting Point--Tier 2---Base

文章目录 一 题目二 过程记录2.1 打点2.2 权限获取2.3 横向移动2.4 权限提升 一 题目 Tags Web、Vulnerability Assessment、Custom Applications、Source Code Analysis、Authentication、Apache、PHP、Reconnaissance、Web Site Structure Discovery、SUDO Exploitation、Au…

lua脚本实现redis分布式锁(脚本解析)

文章目录 lua介绍lua基本语法redis执行lua脚本 - EVAL指令使用lua保证删除原子性 lua介绍 Lua 是一种轻量小巧的脚本语言&#xff0c;用标准C语言编写并以源代码形式开放&#xff0c; 其设计目的是为了嵌入应用程序中&#xff0c;从而为应用程序提供灵活的扩展和定制功能。 设…

Ubuntu 创建用户

在ubuntu系统中创建用户&#xff0c;是最基本的操作。与centos7相比&#xff0c;有较大不同。 我们通过案例介绍&#xff0c;讨论用户的创建。 我们知道&#xff0c;在linux中&#xff0c;有三类用户&#xff1a;超级管理员 root 具有完全权限&#xff1b;系统用户 bin sys a…

split() 函数实现多条件转为数据为数组类型

使用 split() 函数并传递正则表达式 /[,;.-]/ 作为分隔符来将字符串按照逗号、分号和破折号进行拆分&#xff0c;并将结果赋值给 splitArray 数组。下面是一个示例代码&#xff1a; 在上面的示例中&#xff0c;我们使用 split() 函数将 inputString 字符串按照逗号、分号和破折…

分享4个MSVCP100.dll丢失的解决方法

msvcp100.dll是一个重要的动态链接库文件&#xff0c;它是Microsoft Visual C 2010 Redistributable Package的一部分。这个文件的作用是提供在运行C程序时所需的函数和功能。如果计算机系统中msvcp100.dll丢失或者损坏&#xff0c;就会导致软件程序无法启动运行&#xff0c;会…

综合布线可视化管理系统价值分析

传统综合布线管理&#xff0c;全部依靠手工登记&#xff0c;利用标签标示线缆&#xff0c;利用文档资料记录链路的连接和变更&#xff0c;高度依赖网络管理员的管理能力&#xff0c;维护效率低下。同时&#xff0c;网络接入故障和非法接入难以及时发现。在以往的文章中小编一直…

GitHub金矿:一套智能制造MES的源代码,可以直接拿来搞钱的好项目

目前国内智能制造如火如荼&#xff0c;工厂信息化是大趋势。如果找到一个工厂&#xff0c;搞定一个老板&#xff0c;搞软件的小虾米就能吃几年。 中国制造业发达&#xff0c;工厂林立&#xff0c;但是普遍效率不高&#xff0c;需要信息化提高效率。但是矛盾的地方在于&#xf…

聊一聊被人嘲笑的if err!=nil和golang为什么要必须支持多返回值?

golang多返回值演示 我们知道&#xff0c;多返回值是golang的一个特性&#xff0c;比如下面这段代码,里面的参数名我起了几个比较好区分的 package mainfunc main() {Swap(10999, 10888) }func Swap(saaa, sbbb int) (int, int) {return sbbb, saaa }golang为什么要支持多返回…

【Unity细节】如何让组件失活而不是物体失活

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 &#x1f636;‍&#x1f32b;️收录于专栏&#xff1a;unity细节和bug &#x1f636;‍&#x1f32b;️优质专栏 ⭐【…

软件版本控制系统VCS工具——cvs vss svn git

版本控制 版本控制系统&#xff08;Version Control System&#xff0c;VCS&#xff09;是用于跟踪和管理源代码和文档的工具。可追踪和管理修改历史&#xff0c;包括修改的内容、时间、作者等信息。有助于团队协作、追踪变更、恢复历史版本等。VCS的主要目的是帮助团队协作开…

电影《二手杰作》观后感

上周看了电影《二手杰作》,在看电影的时候&#xff0c;自己感觉其实多少有些文艺范&#xff0c;或者有些尴尬的&#xff0c;但是在电影里还好&#xff0c;不过整个故事看下来&#xff0c;多少有点代入感&#xff0c;不多但还是有点。 故事情节&#xff0c;比较简单&#xff0c…

TikTok shop美国小店适合哪些卖家做?附常见运营问题解答

一、Tiktok shop小店分类 大家都知道&#xff0c;美国小店可以分为5 种&#xff1a; 美国本土个人店: 最灵活&#xff0c;有扶持政策&#xff1b;美国法人企业店&#xff1a;要求高&#xff0c;有扶持政策&#xff1b;美国公司中国人占股店 (ACCU店) : 权重相对低&#xff0c…

Android studio:打开应用程序闪退的问题

目录 问题描述分析原因解决方法 在开发Android应用程序的过程中遇到的问题 问题描述 在开发&#xff08;或者叫测试&#xff0c;这么简单的程序可能很难叫开发&#xff09;好一个android之后&#xff0c;在Android studio中调试开发好的app时&#xff0c;编辑器没有提示错误&a…

python连接mysql进行查询

pymysql连接工具类 import pymysql 数据库连接工具类 class MySQLConnection:def __init__(self, host, port, user, password, database):self.host hostself.port portself.user userself.password passwordself.database databaseself.conn Noneself.cursor None# …

Unity游戏开发基础组件

Unity2D 相机调整&#xff1a;Projection设置为Orthographic。也就是正交模式&#xff0c;忽视距离。 资源&#xff1a; Sprite&#xff1a;一种游戏资源&#xff0c;在2D游戏中表示角色场景的图片资源 SpriteSheet&#xff1a;切割一张图片为多个Sprite 在Sprite Editor中可以…

微信小程序自动化采集方案

本文仅供学习交流&#xff0c;只提供关键思路不会给出完整代码&#xff0c;严禁用于非法用途&#xff0c;拒绝转载&#xff0c;若有侵权请联系我删除&#xff01; 一、引言 1、对于一些破解难度大&#xff0c;花费时间长的目标&#xff0c;我们可以先采用自动化点击触发请求&…