diff --git a/src/JTTools/JTTools.csproj b/src/JTTools/JTTools.csproj
index d759cf7..e7b5b43 100644
--- a/src/JTTools/JTTools.csproj
+++ b/src/JTTools/JTTools.csproj
@@ -7,6 +7,7 @@
   </PropertyGroup>
 
   <ItemGroup>
+    <PackageReference Include="BlazorStrap" Version="1.3.1" />
     <PackageReference Include="JT1078" Version="1.0.2" />
     <PackageReference Include="JT808" Version="2.2.10" />
     <PackageReference Include="JT808.Protocol.Extensions.JT1078" Version="2.2.9" />
diff --git a/src/JTTools/Pages/Index.razor b/src/JTTools/Pages/Index.razor
index 58c60fc..9aa8f83 100644
--- a/src/JTTools/Pages/Index.razor
+++ b/src/JTTools/Pages/Index.razor
@@ -2,6 +2,6 @@
 
 
 <div class="jumbotron">
-    <h1 class="display-4">JTTools(alpha)</h1>
+    <h1 class="display-5">JTTools(alpha)</h1>
     <p class="lead">JT808、JT809、JT1078、JT19056、JTNE(新能源)、主动安全(苏标)解析工具</p>
 </div>
diff --git a/src/JTTools/Pages/JT1078Parse.razor b/src/JTTools/Pages/JT1078Parse.razor
index 09b6947..04be6dc 100644
--- a/src/JTTools/Pages/JT1078Parse.razor
+++ b/src/JTTools/Pages/JT1078Parse.razor
@@ -5,7 +5,9 @@
 @using Newtonsoft.Json;
 
 <button class="btn btn-primary" @onclick="Query">解析</button>
-
+<BSAlert Color="Color.Danger" IsOpen="@isOpen" IsDismissible="true" OnDismiss="@OnDismiss">
+    @ErrerMessage
+</BSAlert>
 <div class="right">
     <textarea class="form-control" @bind="HexData" rows="10"></textarea>
     <pre>
@@ -19,10 +21,29 @@
 
     private string Json;
 
+    private string ErrerMessage;
+
+    private bool isOpen = false;
+
+    void OnDismiss()
+    {
+        isOpen = !isOpen;
+        StateHasChanged();
+    }
 
     private void Query()
     {
-        var data = HexData.ToHexBytes();
-        Json = JsonConvert.SerializeObject(JT1078Serializer.Deserialize(data), Formatting.Indented);
+        try
+        {
+            isOpen = false;
+            var data = HexData.ToHexBytes();
+            Json = JsonConvert.SerializeObject(JT1078Serializer.Deserialize(data), Formatting.Indented);
+        }
+        catch (Exception ex)
+        {
+            isOpen = !isOpen;
+            Json = "";
+            ErrerMessage = ex.StackTrace;
+        }
     }
 }
diff --git a/src/JTTools/Pages/JT19056Analyze.razor b/src/JTTools/Pages/JT19056Analyze.razor
index d979f85..68b4e6a 100644
--- a/src/JTTools/Pages/JT19056Analyze.razor
+++ b/src/JTTools/Pages/JT19056Analyze.razor
@@ -5,11 +5,14 @@
 @using JTTools.Configs;
 @inject IJT808Config  Config
 
-<select class="btn-success" @onchange="@OnSelectWayType">
+<select class="form-control" @onchange="@OnSelectWayType">
     <option value="up">上行</option>
     <option value="down">下行</option>
 </select>
 <button class="btn btn-primary" @onclick="Query">分析</button>
+<BSAlert Color="Color.Danger" IsOpen="@isOpen" IsDismissible="true" OnDismiss="@OnDismiss">
+    @ErrerMessage
+</BSAlert>
 <div class="right">
     <textarea class="form-control" @bind="HexData" rows="10"></textarea>
     <pre>
@@ -46,6 +49,16 @@
 
     private string Json;
 
+    private string ErrerMessage;
+
+    private bool isOpen = false;
+
+    void OnDismiss()
+    {
+        isOpen = !isOpen;
+        StateHasChanged();
+    }
+
     protected override void OnInitialized()
     {
         Serializer = Config.GetCarDVRSerializer();
@@ -53,15 +66,25 @@
 
     private void Query()
     {
-        var data = HexData.ToHexBytes();
-        switch (wayType)
+        try
         {
-            case "up":
-                Json = Serializer.UpAnalyze(data, options: JTJsonWriterOptions.Instance);
-                break;
-            case "down":
-                Json = Serializer.DownAnalyze(data, options: JTJsonWriterOptions.Instance);
-                break;
+            isOpen = false;
+            var data = HexData.ToHexBytes();
+            switch (wayType)
+            {
+                case "up":
+                    Json = Serializer.UpAnalyze(data, options: JTJsonWriterOptions.Instance);
+                    break;
+                case "down":
+                    Json = Serializer.DownAnalyze(data, options: JTJsonWriterOptions.Instance);
+                    break;
+            }
+        }
+        catch (Exception ex)
+        {
+            isOpen = !isOpen;
+            Json = "";
+            ErrerMessage = ex.StackTrace;
         }
     }
-}
+ }
diff --git a/src/JTTools/Pages/JT808Analyze.razor b/src/JTTools/Pages/JT808Analyze.razor
index 34ba894..fa7a438 100644
--- a/src/JTTools/Pages/JT808Analyze.razor
+++ b/src/JTTools/Pages/JT808Analyze.razor
@@ -17,11 +17,13 @@
 </select>
 
 <button class="btn btn-primary" @onclick="Query">分析</button>
-
+<BSAlert Color="Color.Danger" IsOpen="@isOpen" IsDismissible="true" OnDismiss="@OnDismiss">
+    @ErrerMessage
+</BSAlert>
 <div class="right">
     <textarea class="form-control" @bind="HexData" rows="10"></textarea>
     <pre>
-         @Json
+       @Json
     </pre>
 </div>
 
@@ -39,6 +41,16 @@
 
     private string Json;
 
+    private string ErrerMessage;
+
+    private bool isOpen = false;
+
+    void OnDismiss()
+    {
+        isOpen = !isOpen;
+        StateHasChanged();
+    }
+
     private void OnSelectProtocolType(ChangeEventArgs e)
     {
         protocolType = e.Value.ToString();
@@ -53,18 +65,29 @@
 
     private void Query()
     {
-        var data = HexData.ToHexBytes();
-        switch (protocolType)
+        try
+        {
+            isOpen = false;
+            var data = HexData.ToHexBytes();
+            switch (protocolType)
+            {
+                case "JT808":
+                    Json = Serializer.Analyze(data, options: JTJsonWriterOptions.Instance);
+
+                    break;
+                case "JT808_JT1078":
+                    Json = JT1078Serializer.Analyze(data, options: JTJsonWriterOptions.Instance);
+                    break;
+                case "JT808_JTAS":
+                    Json = JTAS_Serializer.Analyze(data, options: JTJsonWriterOptions.Instance);
+                    break;
+            }
+        }
+        catch (Exception ex)
         {
-            case "JT808":
-                Json = Serializer.Analyze(data,options: JTJsonWriterOptions.Instance);
-                break;
-            case "JT808_JT1078":
-                Json = JT1078Serializer.Analyze(data, options: JTJsonWriterOptions.Instance);
-                break;
-            case "JT808_JTAS":
-                Json = JTAS_Serializer.Analyze(data, options: JTJsonWriterOptions.Instance);
-                break;
+            isOpen = !isOpen;
+            Json = "";
+            ErrerMessage = ex.StackTrace;
         }
     }
 }
diff --git a/src/JTTools/Pages/JT809Parse.razor b/src/JTTools/Pages/JT809Parse.razor
index 06a4529..174e8e4 100644
--- a/src/JTTools/Pages/JT809Parse.razor
+++ b/src/JTTools/Pages/JT809Parse.razor
@@ -21,7 +21,9 @@
     </div>
 }
 <button class="btn btn-primary" @onclick="Query">解析</button>
-
+<BSAlert Color="Color.Danger" IsOpen="@isOpen" IsDismissible="true" OnDismiss="@OnDismiss">
+    @ErrerMessage
+</BSAlert>
 <div class="right">
     <textarea class="form-control" @bind="HexData" rows="10"></textarea>
     <pre>
@@ -40,6 +42,16 @@
 
     JT809EncryptOptions EncryptOptions;
 
+    private string ErrerMessage;
+
+    private bool isOpen = false;
+
+    void OnDismiss()
+    {
+        isOpen = !isOpen;
+        StateHasChanged();
+    }
+
     private void OnSelectEncryptType(ChangeEventArgs e)
     {
         encryptType = e.Value.ToString();
@@ -53,17 +65,27 @@
 
     private void Query()
     {
-        var data = HexData.ToHexBytes();
-        if (encryptType == "none")
+        try
         {
-            Json = JsonConvert.SerializeObject(Serializer.Deserialize(data), Formatting.Indented);
+            isOpen = false;
+            var data = HexData.ToHexBytes();
+            if (encryptType == "none")
+            {
+                Json = JsonConvert.SerializeObject(Serializer.Deserialize(data), Formatting.Indented);
+            }
+            else
+            {
+                IJT809Config jt809ConfigInternal = new JT809Config(Guid.NewGuid().ToString());
+                jt809ConfigInternal.EncryptOptions = EncryptOptions;
+                JT809Serializer jT809SerializerInternal = new JT809Serializer(jt809ConfigInternal);
+                Json = JsonConvert.SerializeObject(jT809SerializerInternal.Deserialize(data), Formatting.Indented);
+            }
         }
-        else
+        catch(Exception ex)
         {
-            IJT809Config jt809ConfigInternal = new JT809Config(Guid.NewGuid().ToString());
-            jt809ConfigInternal.EncryptOptions = EncryptOptions;
-            JT809Serializer jT809SerializerInternal = new JT809Serializer(jt809ConfigInternal);
-            Json = JsonConvert.SerializeObject(jT809SerializerInternal.Deserialize(data), Formatting.Indented);
+            isOpen = !isOpen;
+            Json = "";
+            ErrerMessage = ex.StackTrace;
         }
     }
 
diff --git a/src/JTTools/Program.cs b/src/JTTools/Program.cs
index 4454260..e0ccd6c 100644
--- a/src/JTTools/Program.cs
+++ b/src/JTTools/Program.cs
@@ -11,6 +11,7 @@ using Microsoft.AspNetCore.Builder;
 using Microsoft.Extensions.DependencyInjection;
 using Newtonsoft.Json.Serialization;
 using JTTools.Configs;
+using BlazorStrap;
 
 namespace JTTools
 {
@@ -46,7 +47,7 @@ namespace JTTools
                                      .AllowAnyMethod()
                                      .AllowAnyHeader()
                                      .AllowAnyOrigin()));
-
+                        services.AddBootstrapCss();
                     })
                     .ConfigureKestrel(ksOptions =>
                     {
diff --git a/src/JTTools/Shared/Alert.razor b/src/JTTools/Shared/Alert.razor
deleted file mode 100644
index fdf5810..0000000
--- a/src/JTTools/Shared/Alert.razor
+++ /dev/null
@@ -1,13 +0,0 @@
-<div class="alert alert-warning alert-dismissible fade show" role="alert">
-    <strong>@Title</strong>@ErrorMessage
-    <button type="button" class="close" data-dismiss="alert" aria-label="Close">
-        <span aria-hidden="true">&times;</span>
-    </button>
-</div>
-
-@code {
-    [Parameter]
-    public string Title { get; set; }
-    [Parameter]
-    public string ErrorMessage { get; set; }
-}
diff --git a/src/JTTools/_Imports.razor b/src/JTTools/_Imports.razor
index d22df85..6a36836 100644
--- a/src/JTTools/_Imports.razor
+++ b/src/JTTools/_Imports.razor
@@ -7,3 +7,4 @@
 @using Microsoft.JSInterop
 @using JTTools
 @using JTTools.Shared
+@using BlazorStrap