Avatar
2
tvd12 Enlightened
tvd12 Enlightened
EzyFox: Bắt đầu tìm hiểu từ đâu để hiểu được cơ chế của spring?
Anh cho em hỏi nếu muốn hiểu cái core với flow ezyfox của anh thì em nên đọc repo nào trước anh nhỉ, Kiểu trước kia em hay thắc mắc vì sao @Component annotation ở spring thì giúp mình đăng kí lớp đó như là bean để được quản lý ở bên dứoi á. Nay em thấy opensource của anh có những thứ đó. Nên em muốn dùng và nghiên cứu thêm thử. Với em thấy có cái gamebox cũng rất hay ạ.
Answer
Avatar
1
Mathis Favier Beginner
Mathis Favier Beginner
[Easyfox-server] null pointer Exception on user repo while trying to connect
So I watched the <a href="https://www.youtube.com/watch?v=aTZDSiiITBM&amp;list=PLlZavoxtKE1IfKY7ohkLLyv6YkHMkvH6G&amp;index=4">video</a> for the authentication with Ezyfox-server but I got an NullPointerException on UserRepo while I try to log in. I can't figure out why because I triple check my code and the video... <p> </p> <p> Here is my code: </p> <p> </p> <pre> # entity/BullyUser: @Getter @Setter @ToString @EzyCollection public class BullyUser { @EzyId int id; String username; String password; } # repo/BullyUserRepo: @EzyRepository("userRepo") public interface BullyUserRepo extends EzyMongoRepository&lt;Long, BullyUser&gt; { } # service/BullyUserService: public interface BullyUserService { void saveUser(BullyUser user); BullyUser createUser(String username, String password); BullyUser getUser(String username); } # service/impl/BullyUserServiceImpl: @Setter @EzySingleton("userService") public class BullyUserServiceImpl implements BullyUserService { @EzyAutoBind private BullyUserRepo BullyUserRepo; @Override public void saveUser(BullyUser user) { BullyUserRepo.save(user); } @Override public BullyUser createUser(String username, String password) { BullyUser user = new BullyUser(); user.setUsername(username); user.setPassword(password); BullyUserRepo.save(user); return user; } @Override public BullyUser getUser(String username) { return BullyUserRepo.findByField("username", username); } } // [PLUGIN]/controller/UserLoginController @EzySingleton @EzyEventHandler(USER_LOGIN) public class UserLoginController extends EzyAbstractPluginEventController { @EzyAutoBind private WelcomeService welcomeService; @EzyAutoBind private BullyUserService userService; @Override public void handle(EzyPluginContext ctx, EzyUserLoginEvent event) { logger.info("{} login in", welcomeService.welcome(event.getUsername())); String username = event.getUsername(); String password = event.getPassword(); BullyUser user = userService.getUser(username); if (user == null) { logger.info("User {} does not exist, creating new user", username); user = userService.createUser(username, password); userService.saveUser(user); } } } </pre>
Answer
Avatar
0
Vu Luong Anh Pundit
Cách tạo mock ScheduledExecutorService cho EzyAppContext khi test
Em đang viết test cho issue <a href="https://github.com/youngmonkeys/ezyfox-server/issues/68">https://github.com/youngmonkeys/ezyfox-server/issues/68</a>. Em dùng Mockito để khởi tạo EzyAppContext: <code class="markdown-inline">EzyAppContext appContext = mock(EzyAppContext.class)</code>. Nhưng làm vậy <code class="markdown-inline">context.get(ScheduledExecutorService.class)</code> trả về <code class="markdown-inline">null</code>: <p> </p> <img class="alignnone size-full wp-image-326" src="https://stackask.com/wp-content/uploads/2021/07/Screen-Shot-2021-07-30-at-16.52.13-1.png" alt="" /> <p> </p> <p> Cho em hỏi nên khởi tạo EzyAppContext như nào ạ? </p>
Answer
Avatar
0
Vu Luong Anh Pundit
[ezyfox-server] Chạy test EzySimpleAppEntryTest bị exception!
Em đã import ezyfox-server thành công, nhưng khi chạy thử <code>ezyfox-server/ezyfox-server-support/src/test/java/com/tvd12/ezyfoxserver/support/test/entry/EzySimpleAppEntryTest.java</code> thì bị exception, mặc dù test vẫn passed. Anh giải thích chỗ này giúp em với ạ. <p> </p> <p> Full log: </p> <pre>19:58:31,683 DEBUG [main] impl.EzyObjectWriterElementsFetcher - start scan class com.tvd12.ezyfoxserver.support.test.entry.ClientNoUserRequestHandler 19:58:31,695 DEBUG [main] impl.EzyObjectWriterElementsFetcher - scan field session 19:58:31,695 DEBUG [main] impl.EzyObjectWriterElementsFetcher - field session has not getter/setter, ignore it 19:58:31,695 DEBUG [main] impl.EzyObjectWriterElementsFetcher - scan field logger 19:58:31,696 DEBUG [main] impl.EzyObjectWriterElementsFetcher - field logger has not getter/setter, ignore it 19:58:31,696 DEBUG [main] impl.EzyObjectWriterElementsFetcher - finish scan class com.tvd12.ezyfoxserver.support.test.entry.ClientNoUserRequestHandler 19:58:31,851 DEBUG [main] impl.EzyObjectWriterBuilder - class com.tvd12.ezyfoxserver.support.test.entry.ClientNoUserRequestHandler$EzyObjectWriter$EzyAutoImpl$1 has generated 19:58:31,852 DEBUG [main] impl.EzyObjectWriterElementsFetcher - start scan class com.tvd12.ezyfoxserver.support.test.entry.ClientChatRequestHandler 19:58:31,853 DEBUG [main] impl.EzyObjectWriterElementsFetcher - scan field user 19:58:31,853 DEBUG [main] impl.EzyObjectWriterElementsFetcher - field user has not getter/setter, ignore it 19:58:31,853 DEBUG [main] impl.EzyObjectWriterElementsFetcher - scan field session 19:58:31,857 DEBUG [main] impl.EzyObjectWriterElementsFetcher - field session has not getter/setter, ignore it 19:58:31,857 DEBUG [main] impl.EzyObjectWriterElementsFetcher - scan field logger 19:58:31,857 DEBUG [main] impl.EzyObjectWriterElementsFetcher - field logger has not getter/setter, ignore it 19:58:31,857 DEBUG [main] impl.EzyObjectWriterElementsFetcher - finish scan class com.tvd12.ezyfoxserver.support.test.entry.ClientChatRequestHandler 19:58:31,860 DEBUG [main] impl.EzyObjectWriterBuilder - class com.tvd12.ezyfoxserver.support.test.entry.ClientChatRequestHandler$EzyObjectWriter$EzyAutoImpl$2 has generated 19:58:31,862 DEBUG [main] impl.EzyObjectWriterElementsFetcher - start scan class com.tvd12.ezyfoxserver.support.test.entry.ClientNoSessionRequestHandler 19:58:31,863 DEBUG [main] impl.EzyObjectWriterElementsFetcher - scan field logger 19:58:31,863 DEBUG [main] impl.EzyObjectWriterElementsFetcher - field logger has not getter/setter, ignore it 19:58:31,864 DEBUG [main] impl.EzyObjectWriterElementsFetcher - finish scan class com.tvd12.ezyfoxserver.support.test.entry.ClientNoSessionRequestHandler 19:58:31,868 DEBUG [main] impl.EzyObjectWriterBuilder - class com.tvd12.ezyfoxserver.support.test.entry.ClientNoSessionRequestHandler$EzyObjectWriter$EzyAutoImpl$3 has generated 19:58:32,348 DEBUG [main] impl.EzyByConstructorSingletonLoader - add singleton with name serverReadyEventHandler of class com.tvd12.ezyfoxserver.support.test.entry.ServerReadyEventHandler, object = com.tvd12.ezyfoxserver.support.test.entry.ServerReadyEventHandler@61d6015a 19:58:32,369 DEBUG [main] impl.EzyByConstructorPrototypeSupplierLoader - add prototype supplier of com.tvd12.ezyfoxserver.support.test.entry.ClientNoUserRequestHandler$EzyPrototypeSupplier$EzyAutoImpl$1 19:58:32,372 DEBUG [main] impl.EzyByConstructorPrototypeSupplierLoader - add prototype supplier of com.tvd12.ezyfoxserver.support.test.entry.ClientNoDataBindingRequestHandler$EzyPrototypeSupplier$EzyAutoImpl$2 19:58:32,377 DEBUG [main] impl.EzyByConstructorPrototypeSupplierLoader - add prototype supplier of com.tvd12.ezyfoxserver.support.test.entry.ClientBadRequestSendRequestHandler$EzyPrototypeSupplier$EzyAutoImpl$3 19:58:32,380 DEBUG [main] impl.EzyByConstructorPrototypeSupplierLoader - add prototype supplier of com.tvd12.ezyfoxserver.support.test.entry.ClientBadRequestNoSendRequestHandler$EzyPrototypeSupplier$EzyAutoImpl$4 19:58:32,383 DEBUG [main] impl.EzyByConstructorPrototypeSupplierLoader - add prototype supplier of com.tvd12.ezyfoxserver.support.test.entry.ClientAppRequestHandler$EzyPrototypeSupplier$EzyAutoImpl$5 19:58:32,386 DEBUG [main] impl.EzyByConstructorPrototypeSupplierLoader - add prototype supplier of com.tvd12.ezyfoxserver.support.test.entry.ClientExceptionRequestHandler$EzyPrototypeSupplier$EzyAutoImpl$6 19:58:32,389 DEBUG [main] impl.EzyByConstructorPrototypeSupplierLoader - add prototype supplier of com.tvd12.ezyfoxserver.support.test.entry.ClientChatRequestHandler$EzyPrototypeSupplier$EzyAutoImpl$7 19:58:32,393 DEBUG [main] impl.EzyByConstructorPrototypeSupplierLoader - add prototype supplier of com.tvd12.ezyfoxserver.support.test.entry.ClientNoSessionRequestHandler$EzyPrototypeSupplier$EzyAutoImpl$8 19:58:32,397 INFO [main] entry.EzySimpleAppEntryTest$EzyAppEntryEx - add event SERVER_READY controller com.tvd12.ezyfoxserver.support.test.entry.ServerReadyEventHandler@61d6015a 19:58:32,414 DEBUG [main] controller.EzyUserRequestAppPrototypeController$Builder - add command badRequestSend and request handler supplier com.tvd12.ezyfoxserver.support.test.entry.ClientBadRequestSendRequestHandler$EzyPrototypeSupplier$EzyAutoImpl$3@72cde7cc 19:58:32,415 DEBUG [main] controller.EzyUserRequestAppPrototypeController$Builder - add command badRequestNoSend and request handler supplier com.tvd12.ezyfoxserver.support.test.entry.ClientBadRequestNoSendRequestHandler$EzyPrototypeSupplier$EzyAutoImpl$4@5fd4f8f5 19:58:32,415 DEBUG [main] controller.EzyUserRequestAppPrototypeController$Builder - add command app and request handler supplier com.tvd12.ezyfoxserver.support.test.entry.ClientAppRequestHandler$EzyPrototypeSupplier$EzyAutoImpl$5@4e7912d8 19:58:32,415 DEBUG [main] controller.EzyUserRequestAppPrototypeController$Builder - add command noSession and request handler supplier com.tvd12.ezyfoxserver.support.test.entry.ClientNoSessionRequestHandler$EzyPrototypeSupplier$EzyAutoImpl$8@2f8dad04 19:58:32,416 DEBUG [main] controller.EzyUserRequestAppPrototypeController$Builder - add command exception and request handler supplier com.tvd12.ezyfoxserver.support.test.entry.ClientExceptionRequestHandler$EzyPrototypeSupplier$EzyAutoImpl$6@53976f5c 19:58:32,416 DEBUG [main] controller.EzyUserRequestAppPrototypeController$Builder - add command noUser and request handler supplier com.tvd12.ezyfoxserver.support.test.entry.ClientNoUserRequestHandler$EzyPrototypeSupplier$EzyAutoImpl$1@c333c60 19:58:32,416 DEBUG [main] controller.EzyUserRequestAppPrototypeController$Builder - add command chat and request handler supplier com.tvd12.ezyfoxserver.support.test.entry.ClientChatRequestHandler$EzyPrototypeSupplier$EzyAutoImpl$7@2bfc268b 19:58:32,416 DEBUG [main] controller.EzyUserRequestAppPrototypeController$Builder - add command noDataBinding and request handler supplier com.tvd12.ezyfoxserver.support.test.entry.ClientNoDataBindingRequestHandler$EzyPrototypeSupplier$EzyAutoImpl$2@79da8dc5 19:58:32,791 WARN [main] controller.EzyUserRequestAppPrototypeController - has no handler with command: no command from session: null(owner: null, address: null) 19:58:32,815 ERROR [main] impl.EzySendResponseImpl - send data: [31, [1, [err, [1, test]]]], to client: null(owner: null, address: null) error java.lang.NullPointerException at com.tvd12.ezyfoxserver.command.impl.EzySendResponseImpl.execute(EzySendResponseImpl.java:41) at com.tvd12.ezyfoxserver.context.EzySimpleServerContext.send(EzySimpleServerContext.java:89) at com.tvd12.ezyfoxserver.command.impl.EzyAppSendResponseImpl.execute(EzyAppSendResponseImpl.java:30) at com.tvd12.ezyfoxserver.context.EzySimpleAppContext.send(EzySimpleAppContext.java:52) at com.tvd12.ezyfoxserver.context.EzyZoneChildContext.send(EzyZoneChildContext.java:25) at com.tvd12.ezyfoxserver.support.controller.EzyUserRequestAppPrototypeController.responseError(EzyUserRequestAppPrototypeController.java:30) at com.tvd12.ezyfoxserver.support.controller.EzyUserRequestAppPrototypeController.responseError(EzyUserRequestAppPrototypeController.java:10) at com.tvd12.ezyfoxserver.support.controller.EzyUserRequestPrototypeController.handle(EzyUserRequestPrototypeController.java:66) at com.tvd12.ezyfoxserver.support.controller.EzyUserRequestSingletonController.handle(EzyUserRequestSingletonController.java:60) at com.tvd12.ezyfoxserver.support.controller.EzyUserRequestAppSingletonController.handle(EzyUserRequestAppSingletonController.java:8) at com.tvd12.ezyfoxserver.support.test.entry.EzySimpleAppEntryTest.handleClientRequest(EzySimpleAppEntryTest.java:136) at com.tvd12.ezyfoxserver.support.test.entry.EzySimpleAppEntryTest.test(EzySimpleAppEntryTest.java:78) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:133) at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:598) at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:173) at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46) at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:824) at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:146) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128) at java.util.ArrayList.forEach(ArrayList.java:1255) at org.testng.TestRunner.privateRun(TestRunner.java:794) at org.testng.TestRunner.run(TestRunner.java:596) at org.testng.SuiteRunner.runTest(SuiteRunner.java:377) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:371) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:332) at org.testng.SuiteRunner.run(SuiteRunner.java:276) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1212) at org.testng.TestNG.runSuitesLocally(TestNG.java:1134) at org.testng.TestNG.runSuites(TestNG.java:1063) at org.testng.TestNG.run(TestNG.java:1031) at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:73) at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123) 19:58:32,820 DEBUG [main] controller.EzyUserRequestAppPrototypeController - request cmd: badRequestSend by session: null(owner: null, address: null) with data: [badRequestSend] error com.tvd12.ezyfox.core.exception.EzyBadRequestException: test at com.tvd12.ezyfoxserver.support.test.entry.ClientBadRequestSendRequestHandler.handle(ClientBadRequestSendRequestHandler.java:21) at com.tvd12.ezyfoxserver.support.controller.EzyUserRequestPrototypeController.handle(EzyUserRequestPrototypeController.java:60) at com.tvd12.ezyfoxserver.support.controller.EzyUserRequestSingletonController.handle(EzyUserRequestSingletonController.java:60) at com.tvd12.ezyfoxserver.support.controller.EzyUserRequestAppSingletonController.handle(EzyUserRequestAppSingletonController.java:8) at com.tvd12.ezyfoxserver.support.test.entry.EzySimpleAppEntryTest.handleClientRequest(EzySimpleAppEntryTest.java:136) at com.tvd12.ezyfoxserver.support.test.entry.EzySimpleAppEntryTest.test(EzySimpleAppEntryTest.java:78) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:133) at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:598) at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:173) at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46) at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:824) at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:146) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128) at java.util.ArrayList.forEach(ArrayList.java:1255) at org.testng.TestRunner.privateRun(TestRunner.java:794) at org.testng.TestRunner.run(TestRunner.java:596) at org.testng.SuiteRunner.runTest(SuiteRunner.java:377) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:371) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:332) at org.testng.SuiteRunner.run(SuiteRunner.java:276) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1212) at org.testng.TestNG.runSuitesLocally(TestNG.java:1134) at org.testng.TestNG.runSuites(TestNG.java:1063) at org.testng.TestNG.run(TestNG.java:1031) at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:73) at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123) 19:58:32,822 DEBUG [main] controller.EzyUserRequestAppPrototypeController - request cmd: badRequestNoSend by session: null(owner: null, address: null) with data: [badRequestNoSend] error com.tvd12.ezyfox.core.exception.EzyBadRequestException: test at com.tvd12.ezyfoxserver.support.test.entry.ClientBadRequestNoSendRequestHandler.handle(ClientBadRequestNoSendRequestHandler.java:21) at com.tvd12.ezyfoxserver.support.controller.EzyUserRequestPrototypeController.handle(EzyUserRequestPrototypeController.java:60) at com.tvd12.ezyfoxserver.support.controller.EzyUserRequestSingletonController.handle(EzyUserRequestSingletonController.java:60) at com.tvd12.ezyfoxserver.support.controller.EzyUserRequestAppSingletonController.handle(EzyUserRequestAppSingletonController.java:8) at com.tvd12.ezyfoxserver.support.test.entry.EzySimpleAppEntryTest.handleClientRequest(EzySimpleAppEntryTest.java:142) at com.tvd12.ezyfoxserver.support.test.entry.EzySimpleAppEntryTest.test(EzySimpleAppEntryTest.java:78) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:133) at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:598) at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:173) at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46) at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:824) at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:146) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128) at java.util.ArrayList.forEach(ArrayList.java:1255) at org.testng.TestRunner.privateRun(TestRunner.java:794) at org.testng.TestRunner.run(TestRunner.java:596) at org.testng.SuiteRunner.runTest(SuiteRunner.java:377) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:371) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:332) at org.testng.SuiteRunner.run(SuiteRunner.java:276) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1212) at org.testng.TestNG.runSuitesLocally(TestNG.java:1134) at org.testng.TestNG.runSuites(TestNG.java:1063) at org.testng.TestNG.run(TestNG.java:1031) at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:73) at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123) =============================================== Default Suite Total tests run: 2, Passes: 2, Failures: 0, Skips: 0 ===============================================</pre>
Answer
Avatar
0
Vu Luong Anh Pundit
[ezyfox-server] Làm sao để mở ezyfox-server bằng IntelliJ Idea?
Em đã import ezyfox-server vào IntelliJ nhưng các file test không chạy được. Các bước: <p> </p> <ol start="1"> <li>Fork <code class="markdown-inline">ezyfox-server</code> về: <a href="https://github.com/vu-luong/ezyfox-server">https://github.com/vu-luong/ezyfox-server</a> </li> </ol> <p> </p> <ol start="2"> <li>Import vào IntelliJ Idea </li> </ol> <p> </p> <ol start="3"> <li>Set Sources Root: </li> </ol> <p> </p> <img class="alignnone size-full wp-image-247" src="https://stackask.com/wp-content/uploads/2021/07/Screen-Shot-2021-07-29-at-12.22.38.png" alt="" /> <p> </p> <ol start="4"> <li>Kết quả bị lỗi: </li> </ol> <p> </p> <img class="alignnone size-full wp-image-248" src="https://stackask.com/wp-content/uploads/2021/07/Screen-Shot-2021-07-29-at-12.23.10.png" alt="" />
Answer
Avatar
1
Vu Luong Anh Pundit
[ezyfox-boot] packagesToScan bị rỗng
Mình tạo project bằng <code class="markdown-inline">ezyfox-server-archetype</code>, và dùng thư viện <code class="markdown-inline">ezyfox-boot-autoconfigure</code>, nhưng packagesToScan bị rỗng. <p> </p> <img class="alignnone size-full wp-image-216" src="https://stackask.com/wp-content/uploads/2021/07/Screen-Shot-2021-07-29-at-01.03.12.png" alt="" /> <p> </p> <p> Source code: <a href="https://github.com/vu-luong/EzySmashers">https://github.com/vu-luong/EzySmashers</a> </p>
Answer