master
dai_48k 2025-04-01 15:58:54 +08:00
commit c07515b18c
42 changed files with 1416 additions and 0 deletions

13
.gitignore vendored 100644
View File

@ -0,0 +1,13 @@
# 程序生成
BKPG/target
BKPG_DEMO/target
BKPG_PROTOCAL/target
PLUGIN_BKPG_GROUP_PROCESS/target
ext/*.jar
# 个人项目
PLUGIN_BKPG_Company

8
.idea/.gitignore vendored 100644
View File

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Datasource local storage ignored files
/../../../../../:\projects_self\java\BKPG_PROj\.idea/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/

View File

@ -0,0 +1,8 @@
<component name="ArtifactManager">
<artifact type="jar" name="PLUGIN_BKPG_Company:jar">
<output-path>$PROJECT_DIR$/ext</output-path>
<root id="archive" name="PLUGIN_BKPG_Company.jar">
<element id="module-output" name="PLUGIN_BKPG_Company" />
</root>
</artifact>
</component>

27
.idea/compiler.xml 100644
View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="BKPG_DEMO" />
<module name="BKPG_PROTOCAL" />
<module name="PLUGIN_BKPG_GROUP_PROCESS" />
<module name="PLUGIN_BKPG_Company" />
<module name="BKPG" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel>
<module name=".mvn (1)" target="1.5" />
<module name=".mvn (2)" target="1.5" />
<module name="BKPG" target="8" />
<module name="BKPG_DEMO" target="8" />
<module name="BKPG_PROj" target="8" />
<module name="BKPG_PROTOCAL" target="8" />
<module name="PLUGIN_BKPG_Company" target="1.8" />
<module name="PLUGIN_BKPG_GROUP_PROCESS" target="8" />
</bytecodeTargetLevel>
</component>
</project>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/BKPG/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/BKPG/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/BKPG/src/main/resources/img" charset="GBK" />
<file url="file://$PROJECT_DIR$/BKPG_DEMO/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/BKPG_PROTOCAL/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/PLUGIN_BKPG_Company/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/PLUGIN_BKPG_GROUP_PROCESS/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/PLUGIN_BKPG_GROUP_PROCESS/src/main/resources" charset="UTF-8" />
</component>
</project>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://repo.maven.apache.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
</component>
</project>

View File

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: junit:junit:4.11">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../basic/Maven/maven_repository/junit/junit/4.11/junit-4.11.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../basic/Maven/maven_repository/junit/junit/4.11/junit-4.11-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../basic/Maven/maven_repository/junit/junit/4.11/junit-4.11-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Maven: org.hamcrest:hamcrest-core:1.3">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../basic/Maven/maven_repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/../../../basic/Maven/maven_repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/../../../basic/Maven/maven_repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar!/" />
</SOURCES>
</library>
</component>

View File

@ -0,0 +1,15 @@
<component name="libraryTable">
<library name="Maven: top.dreamcenter.bkpg:BKPG_PROTOCAL:1.0-SNAPSHOT">
<CLASSES>
<root url="jar://$PROJECT_DIR$/../../../basic/Maven/maven_repository/top/dreamcenter/bkpg/BKPG_PROTOCAL/1.0-SNAPSHOT/BKPG_PROTOCAL-1.0-SNAPSHOT.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://$PROJECT_DIR$/BKPG_PROTOCAL/BKPG_PROTOCAL-1.0-SNAPSHOT-javadoc.jar!/" />
<root url="jar://$PROJECT_DIR$/../../../basic/Maven/maven_repository/top/dreamcenter/bkpg/BKPG_PROTOCAL/1.0-SNAPSHOT/BKPG_PROTOCAL-1.0-SNAPSHOT-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://$PROJECT_DIR$/BKPG_PROTOCAL/BKPG_PROTOCAL-1.0-SNAPSHOT-sources.jar!/" />
<root url="jar://$PROJECT_DIR$/../../../basic/Maven/maven_repository/top/dreamcenter/bkpg/BKPG_PROTOCAL/1.0-SNAPSHOT/BKPG_PROTOCAL-1.0-SNAPSHOT-sources.jar!/" />
</SOURCES>
</library>
</component>

21
.idea/misc.xml 100644
View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/BKPG/pom.xml" />
<option value="$PROJECT_DIR$/BKPG_DEMO/pom.xml" />
<option value="$PROJECT_DIR$/BKPG_PROTOCAL/pom.xml" />
<option value="$PROJECT_DIR$/BKPG_SELF/pom.xml" />
<option value="$PROJECT_DIR$/BKPG_GROUP_PROCESS_TEMPLATE/BKPG_GROUP_PROCESS_TEMPLATE/pom.xml" />
<option value="$PROJECT_DIR$/BKPG_GROUP_PROCESS_TEMPLATE/pom.xml" />
<option value="$PROJECT_DIR$/PLUGIN_BKPG_Company/pom.xml" />
<option value="$PROJECT_DIR$/PLUGIN_BKPG_GROUP_PROCESS/pom.xml" />
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

13
.idea/modules.xml 100644
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/BKPG/BKPG.iml" filepath="$PROJECT_DIR$/BKPG/BKPG.iml" />
<module fileurl="file://$PROJECT_DIR$/BKPG_DEMO/BKPG_DEMO.iml" filepath="$PROJECT_DIR$/BKPG_DEMO/BKPG_DEMO.iml" />
<module fileurl="file://$PROJECT_DIR$/BKPG_PROTOCAL/BKPG_PROTOCAL.iml" filepath="$PROJECT_DIR$/BKPG_PROTOCAL/BKPG_PROTOCAL.iml" />
<module fileurl="file://$PROJECT_DIR$/BKPG_PROj.iml" filepath="$PROJECT_DIR$/BKPG_PROj.iml" />
<module fileurl="file://$PROJECT_DIR$/PLUGIN_BKPG_Company/PLUGIN_BKPG_Company.iml" filepath="$PROJECT_DIR$/PLUGIN_BKPG_Company/PLUGIN_BKPG_Company.iml" />
<module fileurl="file://$PROJECT_DIR$/PLUGIN_BKPG_GROUP_PROCESS/PLUGIN_BKPG_GROUP_PROCESS.iml" filepath="$PROJECT_DIR$/PLUGIN_BKPG_GROUP_PROCESS/PLUGIN_BKPG_GROUP_PROCESS.iml" />
</modules>
</component>
</project>

View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>

6
.idea/vcs.xml 100644
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

20
BKPG/BKPG.iml 100644
View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<excludeFolder url="file://$MODULE_DIR$/${project.build.directory}/classes" />
<excludeFolder url="file://$MODULE_DIR$/${project.build.directory}/test-classes" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.11" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
<orderEntry type="module" module-name="BKPG_PROTOCAL" />
</component>
</module>

60
BKPG/pom.xml 100644
View File

@ -0,0 +1,60 @@
<?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>
<parent>
<artifactId>BKPG_PROj</artifactId>
<groupId>top.dreamcenter</groupId>
<version>${revision}</version>
</parent>
<groupId>top.dreamcenter.bkpg</groupId>
<artifactId>BKPG</artifactId>
<name>BKPG</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>top.dreamcenter.bkpg</groupId>
<artifactId>BKPG_PROTOCAL</artifactId>
<version>${revision}</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifest>
<mainClass>top.dreamcenter.bkpg.App</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,58 @@
package top.dreamcenter.bkpg;
import top.dreamcenter.bkpg.ui.MainFrame;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.net.URL;
/**
*
*
*/
public class App
{
public static void main(String[] args){
final MainFrame[] mainFrame = {new MainFrame()};
mainFrame[0].setVisible(true);
if (SystemTray.isSupported()){
URL url = App.class.getClassLoader().getResource("img/icon.png");
Image icon = Toolkit.getDefaultToolkit().createImage(url);
SystemTray tray = SystemTray.getSystemTray();
PopupMenu popupMenu = new PopupMenu();
MenuItem reloadItem = new MenuItem("Reload");
reloadItem.addActionListener(e -> {
mainFrame[0].setVisible(false);
mainFrame[0].reloadFrame();
mainFrame[0].setVisible(true);
});
MenuItem exitItem = new MenuItem("Exit");
exitItem.addActionListener(e -> System.exit(0));
popupMenu.add(reloadItem);
popupMenu.add(exitItem);
TrayIcon trayIcon = new TrayIcon(icon, "任务管理器", popupMenu);
trayIcon.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == 1) {
mainFrame[0].setVisible(!mainFrame[0].isVisible());
}
}
});
try {
tray.add(trayIcon);
} catch (AWTException e) {
e.printStackTrace();
}
}
}
}

View File

@ -0,0 +1,23 @@
package top.dreamcenter.bkpg.entity;
import top.dreamcenter.bkpg.protocal.MiniApp;
/**
*
*/
public class MiniAppJListWrap {
private MiniApp miniApp;
public MiniAppJListWrap(MiniApp miniApp) {
this.miniApp = miniApp;
}
public MiniApp getMiniApp() {
return miniApp;
}
@Override
public String toString() {
return miniApp.getName();
}
}

View File

@ -0,0 +1,98 @@
package top.dreamcenter.bkpg.ui;
import top.dreamcenter.bkpg.entity.MiniAppJListWrap;
import top.dreamcenter.bkpg.protocal.MiniApp;
import top.dreamcenter.bkpg.util.MiniAppRegister;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
import java.util.*;
import java.util.stream.Collectors;
public class MainFrame extends JFrame {
private final HashMap<String, MiniApp> container;
public MainFrame() {
container = MiniAppRegister.registerApps();
// 基础设置
setSize(600,400);
setLocationRelativeTo(null);
setLayout(null);
setTitle("JM管理器");
setResizable(false);
URL resource = MainFrame.class.getClassLoader().getResource("img/icon.png");
Image icon = Toolkit.getDefaultToolkit().createImage(resource);
setIconImage(icon);
initializeContent();
}
private void initializeContent() {
// 面板
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setBounds(156, 2,424,358);
panel.setBackground(new Color(250,250,250));
panel.add(new JLabel("欢迎使用JM管理器"), BorderLayout.NORTH);
// 任务列表
DefaultListModel<MiniAppJListWrap> model = new DefaultListModel<>();
for (Map.Entry<String, MiniApp> next : container.entrySet()) {
model.addElement(new MiniAppJListWrap(next.getValue()));
}
JList<MiniAppJListWrap> list = new JList<>(model);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.addListSelectionListener(e -> {
if (!e.getValueIsAdjusting()){
panel.removeAll();
MiniAppJListWrap entity = list.getSelectedValue();
panel.add(entity.getMiniApp().getPanel());
panel.updateUI();
}
});
JScrollPane tasksPanelS = new JScrollPane(list);
tasksPanelS.setBounds(2,2,150,358);
add(tasksPanelS);
add(panel);
}
public void reloadFrame() {
// 1. 保护中的程序列表
Map<String, MiniApp> protectedApps = container.entrySet().stream()
.filter(item -> item.getValue().protect())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
// 2. 新的程序列表
HashMap<String, MiniApp> list = MiniAppRegister.registerApps();
list.forEach((key, value) -> {
if (!protectedApps.containsKey(key)) {
protectedApps.put(key, value);
}
});
// 放入容器
container.clear();
container.putAll(protectedApps);
getContentPane().removeAll();
initializeContent();
revalidate();
repaint();
}
}

View File

@ -0,0 +1,12 @@
package top.dreamcenter.bkpg.util;
import java.io.File;
import java.io.FilenameFilter;
public class JarFileFilter implements FilenameFilter {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".jar");
}
}

View File

@ -0,0 +1,95 @@
package top.dreamcenter.bkpg.util;
import top.dreamcenter.bkpg.protocal.MiniApp;
import top.dreamcenter.bkpg.protocal.MiniAppGroup;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
/**
*
*/
public class MiniAppRegister {
/**
* ext
* @return
*/
public static HashMap<String, MiniApp> registerApps() {
HashMap<String, MiniApp> miniAppContainer = new HashMap<>();
Class<MiniApp> miniAppClass = MiniApp.class;
Class<MiniAppGroup> miniAppGroupClass = MiniAppGroup.class;
// 找到ext 文件夹 并且初始化ext路径类加载器
String extDirectory = "ext";
File file = new File(extDirectory);
// 解析ext 目录下的 Jar文件
File[] files = file.listFiles(new JarFileFilter());
if (files == null) return new HashMap<>();
// 遍历jar文件
for (File tmp : files) {
JarFile jarFile = null;
try {
jarFile = new JarFile("/" + tmp.getAbsoluteFile());
} catch (IOException e) {
e.printStackTrace();
}
// 解析jar包
if (jarFile != null) {
Enumeration<JarEntry> entries = jarFile.entries();
while (entries.hasMoreElements()){
JarEntry jarEntry = entries.nextElement();
// 解析class文件
if (jarEntry.getName().endsWith(".class") && !jarEntry.getName().contains("$")){
String classRoute = jarEntry.getName().replaceAll("/", ".").replace(".class", "");
try {
// 装载类
URLClassLoader loader = new URLClassLoader(new URL[]{tmp.toURI().toURL()});
Class<?> clazz = loader.loadClass(classRoute);
// 校验是否符合协议
if (miniAppClass.isAssignableFrom(clazz)) { // 单应用
// 注册进容器
Object obj = clazz.getConstructor().newInstance();
miniAppContainer.put(classRoute, (MiniApp) obj);
} else if(miniAppGroupClass.isAssignableFrom(clazz)){ // 组合应用
// 注册进容器
Object obj = clazz.getConstructor().newInstance();
MiniAppGroup group = (MiniAppGroup) obj;
List<MiniApp> miniApps = group.getMiniApps();
// 检查返回值是否为空,如果为空则不处理
if (miniApps != null) {
for (int i = 0; i < miniApps.size(); i++) {
MiniApp app = miniApps.get(i);
miniAppContainer.put(classRoute + "-" + app.getName(), app);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
// 返回结果
return miniAppContainer;
}
}

View File

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: top.dreamcenter.bkpg.App

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

View File

@ -0,0 +1,20 @@
package top.dreamcenter.bkpg;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
/**
* Unit test for simple App.
*/
public class AppTest
{
/**
* Rigorous Test :-)
*/
@Test
public void shouldAnswerWithTrue()
{
assertTrue( true );
}
}

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/${project.build.directory}/classes" />
<excludeFolder url="file://$MODULE_DIR$/${project.build.directory}/test-classes" />
<excludeFolder url="file://$MODULE_DIR$/ext" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="BKPG_PROTOCAL" />
</component>
</module>

36
BKPG_DEMO/pom.xml 100644
View File

@ -0,0 +1,36 @@
<?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>
<parent>
<artifactId>BKPG_PROj</artifactId>
<groupId>top.dreamcenter</groupId>
<version>${revision}</version>
</parent>
<groupId>top.dreamcenter.bkpg</groupId>
<artifactId>BKPG_DEMO</artifactId>
<dependencies>
<dependency>
<groupId>top.dreamcenter.bkpg</groupId>
<artifactId>BKPG_PROTOCAL</artifactId>
<version>${revision}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<outputDirectory>${project.parent.basedir}/ext</outputDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,28 @@
package top.dreamcenter.bkpg.demo;
import top.dreamcenter.bkpg.demo.ui.MainPanel;
import top.dreamcenter.bkpg.protocal.MiniApp;
import javax.swing.*;
public class DemoApp implements MiniApp {
private static final String DEMO_APP = "案例程序";
@Override
public String getName() {
return DEMO_APP;
}
@Override
public JPanel getPanel() {
MainPanel mainPanel = new MainPanel();
mainPanel.add(new JLabel(getName()));
return mainPanel;
}
@Override
public boolean protect() {
return false;
}
}

View File

@ -0,0 +1,17 @@
package top.dreamcenter.bkpg.demo;
import top.dreamcenter.bkpg.protocal.template.ProcessAppTemplate;
public class DemoApp2 extends ProcessAppTemplate {
private static final String DEMO_APP = "案例程序2";
@Override
public String getName() {
return DEMO_APP;
}
@Override
public String getCmdStr() {
return "ping 81.70.80.152 -t";
}
}

View File

@ -0,0 +1,15 @@
package top.dreamcenter.bkpg.demo;
import top.dreamcenter.bkpg.protocal.template.ProcessAppTemplate;
public class DemoApp3 extends ProcessAppTemplate {
@Override
public String getName() {
return "案例程序3";
}
@Override
public String getCmdStr() {
return "ipconfig";
}
}

View File

@ -0,0 +1,35 @@
package top.dreamcenter.bkpg.demo;
import top.dreamcenter.bkpg.protocal.MiniApp;
import top.dreamcenter.bkpg.protocal.MiniAppGroup;
import top.dreamcenter.bkpg.protocal.template.ProcessAppTemplate;
import java.util.LinkedList;
import java.util.List;
public class DemoGroupApp implements MiniAppGroup {
@Override
public List<MiniApp> getMiniApps() {
List<MiniApp> list = new LinkedList<>();
for (int i = 0; i < 3; i++) {
int finalI = i;
MiniApp miniApp = new ProcessAppTemplate() {
@Override
public String getCmdStr() {
return "ping www.baidu.com -n " + (finalI + 1);
}
@Override
public String getName() {
return "GroupDemo" + finalI;
}
};
list.add(miniApp);
}
return list;
}
}

View File

@ -0,0 +1,15 @@
package top.dreamcenter.bkpg.demo.ui;
import javax.swing.*;
public class MainPanel extends JPanel {
public MainPanel() {
JLabel label = new JLabel("这是一个demo");
add(label);
setVisible(true);
}
}

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/${project.build.directory}/classes" />
<excludeFolder url="file://$MODULE_DIR$/${project.build.directory}/test-classes" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -0,0 +1,17 @@
<?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>top.dreamcenter.bkpg</groupId>
<artifactId>BKPG_PROTOCAL</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>

View File

@ -0,0 +1,27 @@
package top.dreamcenter.bkpg.protocal;
import javax.swing.*;
/**
*
*/
public interface MiniApp {
/**
*
* @return
*/
String getName();
/**
*
* @return
*/
JPanel getPanel();
/**
*
* @return
*/
boolean protect();
}

View File

@ -0,0 +1,16 @@
package top.dreamcenter.bkpg.protocal;
import java.util.List;
/**
*
*/
public interface MiniAppGroup {
/**
*
* @return
*/
List<MiniApp> getMiniApps();
}

View File

@ -0,0 +1,191 @@
package top.dreamcenter.bkpg.protocal.template;
import top.dreamcenter.bkpg.protocal.MiniApp;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.concurrent.TimeUnit;
/**
*
*/
public abstract class ProcessAppTemplate implements MiniApp, ActionListener {
private Process process;
private JTextArea textArea;
private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
*
* @return CMD
*/
public abstract String getCmdStr();
@Override
public JPanel getPanel() {
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setBackground(Color.WHITE);
JPanel centerPanel = new JPanel();
centerPanel.setLayout(new FlowLayout());
centerPanel.setBackground(Color.WHITE);
// 标题
JLabel title = new JLabel(getName());
// 按钮组
JButton startBtn = new JButton("启动");
JButton stopBtn = new JButton("停止");
startBtn.setBackground(Color.WHITE);
stopBtn.setBackground(Color.WHITE);
startBtn.addActionListener(this);
stopBtn.addActionListener(this);
startBtn.setActionCommand("start");
stopBtn.setActionCommand("stop");
centerPanel.add(startBtn);
centerPanel.add(stopBtn);
// 输出
if (textArea == null) {
textArea = new JTextArea();
}
textArea.setBackground(Color.DARK_GRAY);
textArea.setForeground(Color.WHITE);
textArea.setRows(15);
JScrollPane scrollPane = new JScrollPane(textArea);
panel.add(title, BorderLayout.NORTH);
panel.add(centerPanel, BorderLayout.CENTER);
panel.add(scrollPane, BorderLayout.SOUTH);
return panel;
}
@Override
public void actionPerformed(ActionEvent e) {
switch (e.getActionCommand()){
case "start": btnStartMethod(); break;
case "stop": btnStopMethod(); break;
default:
System.out.println("未找到的命令:" + e.getActionCommand());
}
}
/**
* -
*/
private void btnStartMethod() {
new Thread(() -> {
successWrite("尝试启动程序...");
if (process != null) {
failWrite("已启动过。");
return;
}
try {
process = Runtime.getRuntime().exec(getCmdStr());
successWrite("启动成功!");
heartbeatCheck();
String tmp;
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"));
BufferedReader errReader = new BufferedReader(new InputStreamReader(process.getErrorStream(), "GBK"));
while ((tmp = reader.readLine()) != null) {
successWrite(tmp);
}
while ((tmp = errReader.readLine()) != null) {
failWrite(tmp);
}
reader.close();
errReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
/**
* -
*/
private void btnStopMethod() {
if (process ==null) {
failWrite("未启动。");
return;
}
if (process.isAlive()) process.destroy();
process = null;
successWrite("已终止。");
}
/**
*
* @param raw
*/
private void successWrite(String raw) {
textArea.append(formatOutput(true, raw));
}
/**
*
* @param raw
*/
private void failWrite(String raw) {
textArea.append(formatOutput(false, raw));
}
/**
*
* @param code
* @param raw
* @return
*/
private String formatOutput(boolean code,String raw) {
return (code ? "O" : "E") + " " + dateFormat.format(Calendar.getInstance().getTime()) + " " + raw + "\n";
}
/**
* 5
*/
private void heartbeatCheck() {
new Thread(() -> {
while (true) {
if (process == null) break;
else if (!process.isAlive()) {
failWrite("心跳停止");
process.destroy();
process = null;
successWrite("已释放资源");
break;
}
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
@Override
public boolean protect() {
return process != null && process.isAlive();
}
}

15
BKPG_PROj.iml 100644
View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/${project.build.directory}/classes" />
<excludeFolder url="file://$MODULE_DIR$/${project.build.directory}/test-classes" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="BKPG_PROTOCAL" />
</component>
</module>

View File

@ -0,0 +1,38 @@
<?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>
<parent>
<artifactId>BKPG_PROj</artifactId>
<groupId>top.dreamcenter</groupId>
<version>${revision}</version>
</parent>
<groupId>top.dreamcenter.bkpg.plugin.group</groupId>
<artifactId>PLUGIN_BKPG_GROUP_PROCESS</artifactId>
<name>PLUGIN_BKPG_GROUP_PROCESS</name>
<dependencies>
<dependency>
<groupId>top.dreamcenter.bkpg</groupId>
<artifactId>BKPG_PROTOCAL</artifactId>
<version>${revision}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<outputDirectory>${project.parent.basedir}/ext</outputDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -0,0 +1,52 @@
package top.dreamcenter.bkpg.group;
import top.dreamcenter.bkpg.protocal.MiniApp;
import top.dreamcenter.bkpg.protocal.MiniAppGroup;
import top.dreamcenter.bkpg.protocal.template.ProcessAppTemplate;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.List;
public class ProcessGroupApp implements MiniAppGroup {
@Override
public List<MiniApp> getMiniApps() {
List<MiniApp> list = new LinkedList<>();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("ext/ProgressGroup.txt")))) {
String line;
while ((line = reader.readLine()) != null) {
String[] split = line.split(": ");
String appName = split[0];
String appCmd = split[1];
MiniApp miniApp = new ProcessAppTemplate() {
@Override
public String getCmdStr() {
return appCmd;
}
@Override
public String getName() {
return appName;
}
};
list.add(miniApp);
}
} catch (Exception e){
System.err.println(e.getMessage());
return list;
}
return list;
}
}

118
README.md 100644
View File

@ -0,0 +1,118 @@
## 项目架构
主工程
模块 | 作用
--- | ---
BKPG | 主应用程序
BKPG_PROTOCAL | 三方扩展协议
BKPG_DEMO | 简单示例扩展
官方扩展插件工程
模块 | 作用
--- | ---
PLUGIN_BKPG_GROUP_PROCESS | 命令组
## 生产环境
- JAVA : 8
## 主应用程序执行逻辑
1. 应用启动绘制UI挂载到系统托盘
2. 扫描注册ext目录下的jar包(扫描实现了MiniApp的类)
3. 程序挂载
## 扩展协议
### 可用协议
```text
MiniApp 基础协议
┗ ProcessAppTemplate 命令执行协议模板
MiniAppGroup 程序组合包
```
### 协议结构定义
MiniApp
- String getName(); // 获取应用名称
- JPanel getPanel(); // 获取应用面板
- boolean protect(); // 保护应用,重启是否重新装载
MiniAppGroup
- List\<MiniApp> getMiniApps(); // 获取所有的应用
ProcessAppTemplate: MiniApp
- String getName(); // 获取应用名称
- String getCmdStr(); // 需要执行的命令
- 其余基类函数已默认实现
### 详细说明
**MiniApp** 为基础协议,所有的扩展实现都需要继承或者实现该协议,
主应用程序只会扫描到实现了该接口的类,并且注册到容器中。
MiniAppGroup是对MiniApp的扩展旨在一次性批量注入MiniApp
同样也会被扫描到其下的miniApp也都会被注册。
MiniApp中getName 是用于获取任务名称的,不用担心重复导致程序异常
(因为注册时采用的是类完整访问路径注册的) 不过建议名称具有标志性,
这样才能快速识别该任务所具备的特质。
getPanel 是绘制的面板,即右面板,实际的操作区,可以自定义,
也可以采用模板快速构建如ProcessAppTemplate
如果自定义,或者制作模板,需要注意以下几点:
1. 长连接的任务,强烈建议做好资源的调度,适量增加 任务控制按钮
(启动、终止);如果可监测,建议增加连接心跳监测机制,
在一定时间后,自动断开连接。
2. 从A任务切换到B任务A任务面板会销毁调用B任务面板
但是任务的实例不会销毁,所以,你可以将一些数据存于全局变量来存储
上一会话的某些状态量。
3. 主程序面板的大小是固定的,所以,为了界面协调,建议纵向布局,
并且内容较多的话,适量增加滚动条。
4. 任务自身不建议开辟太大的内存空间,以免出现任务切换卡顿现象,
如果一定要用大量内存也做好完备的内存管控避免出现OOM的情况。
protect() 是保护函数如果返回true则表示在BKPG进行RELOAD时该App不会被注销
而是保持实例不变,状态也都保持。这通常作为服务器服务非常关键,比如想要添加一个指令,
需要RELOAD但是原有服务不能关闭如果设置为true就可以实现保护。
**ProcessAppTemplate** 为命令执行协议模板为抽象类继承实现了MiniApp接口
用于执行命令行指令需要实现两个接口一个是getName作用同上另外一个是该抽象类
独有的getCmdStr需要设置命令行的完整执行指令。当点击面板的执行按钮时
会启动一个线程来执行该命令并且每5s会检测一次命令心跳如果心跳失去连接
则会释放资源。可以作为一些应用或者服务的启动端。
为了更加高效的添加命令(常用),
官方内置了一个命令AppGroup: **PLUGIN_BKPG_GROUP_PROCESS**
通过配置ext/ProgressGroup.txt来添加指令应用
指令名称和指令用英文冒号和一个空格隔开【: 】会自动创建多组ProcessAppTemplate。
### 第三方扩展指南
首先下载BKPG_PROTOCAL协议JAR包引入自己的项目中作为环境依赖。
之后在自己项目中实现MiniApp/MiniAppGroup接口或者ProcessAppTemplate抽象类即可。
将JAR包生成路径配置到ext目录下此时生成JAR包点击主程序系统托盘右键的RELOAD选项
即可看到JAR包中的MiniApp都已经加载完毕了。
你可以参考BKPG_DEMO的项目或者直接套用该demo来架构一个项目。
注意最后打包时不应该包含BKPG_PROTOCAL这个依赖是冗余的建议排除在外。
一个JAR包项目中可以包含多个MiniApp这些MiniApp如果没有特殊机制劫持
最后全部会被装载进入到容器之中。
如果您开发了自己的工具包并且认为非常具有价值你也可以分享自己的JAR包给别人
或者分享给官方由我们加入README进行大众分享。

View File

@ -0,0 +1,2 @@
PING百度: ping www.baidu.com
PING主站: ping www.dreamcenter.top

57
pom.xml 100644
View File

@ -0,0 +1,57 @@
<?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>top.dreamcenter</groupId>
<artifactId>BKPG_PROj</artifactId>
<version>${revision}</version>
<packaging>pom</packaging>
<name>BKPG_PROj</name>
<description>A tool to manage all self process.</description>
<modules>
<module>BKPG</module>
<module>BKPG_DEMO</module>
<module>PLUGIN_BKPG_GROUP_PROCESS</module>
</modules>
<properties>
<revision>1.0-SNAPSHOT</revision>
<junit.version>4.11</junit.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.4.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.6.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>